네 번째 - OpenCV 기초 - 영상의 속성, 픽셀 값 참조 - 국비지원무료교육
by makeany1. OpenCV 는 영상 데이터를 numpy.ndarray 로 표현
import cv2
img1 = cv2.imread('blackpink.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('blackpink.jpg', cv2.IMREAD_COLOR)
numpy.ndarray
- ndim 차원 수 . len img.shape 과 같음
- shape: 각 차원의 크기 . (h, w) -> 그레이 스케일 영상 또는 (h, w, 3) -> 컬러 영상
세로(높이)가 먼저고 가로(너비)가 그 다음이다.
컬러 영상은 3, png에서 알파채널이 하나 추가 되면 4, 그레이 스케일은 당연 2 이다. - size: 전체 원소 개수
- dtype 원소의 데이터 타입 . 영상 데이터는 uint8
2. OpenCV 영상 데이터 자료형과 NumPy 자료형
OpenCV 자료형 (1 채널) | NumPy 자료형 | 구분 |
cv2.CV_8U | numpy.uint8 | 8비트 부호없는 정수 |
cv2.CV_8S | numpy.int8 | 8비트 부호있는 정수 |
cv2.CV_16U | numpy.uint16 | 16비트 부호없는 정수 |
cv2.CV_16S | numpy.int16 | 16비트 부호있는 정수 |
cv2.CV_32S | numpy.int32 | 32비트 부호있는 정수 |
cv2.CV_32F | numpy.float32 | 32비트 부동소수형 |
cv2.CV_64F | numpy.float64 | 64비트 부동소수형 |
cv2.CV_16F | numpy.float16 | 16비트 부동소수형 |
- 그레이스케일 영상 : cv2.CV_8UC1 -> numpy.uint8, shape = (h, w)
- 컬러 영상 : cv2.CV_8UC3 -> numpy.uint8, shape = (h, w, 3)
3. 영상의 속성 참조 예제
img1 = cv2.imread( imread('cat. cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread( imread('cat. cv2.IMREAD_COLOR)
print('type(img1):', type(img1)) # type(img1): <class 'numpy.ndarray'>
print('img1.shape:', img1.shape) # img1.shape: (480, 640)
print('img2.shape:', img2.shape) # img2.shape: (480, 640, 3)
print('img2.dtype:', img2.dtype) # img2.dtype: uint8
h, w = img2.shape[:2] # h: 480, w: 640
print('img2 size: {} x {}'.format(w, h))
if len(img1.shape) == 2:
print('img1 is a grayscale image')
elif len(img1.shape) == 3:
print('img1 is a truecolor image')
4. 영상의 픽셀 값 참조 예제
img1 = cv2.imread('cat.bmp', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('cat.bmp', cv2.IMREAD_COLOR)
# for문으로 픽셀 값을 변경하는 작업은 매우 느리므로, 픽셀 값 참조 방법만 확인하고 실제로는 사용 금지
for y in range (h):
for x in range (w):
img1[y, x] = 255
img2[y, x] = [0, 0, 255]
# img1[:,:] 255
# img2[:,:] ==(0, 0, 255)
영상의 생성, 복사, 부분 영상 추출
1. 지정한 크기로 새 영상 생성하기
numpy.empty(shape, dtype = float, ......) --> arr
numpy.zeros(shape, dtype = float, ......) --> arr
numpy.ones(shape, dtype = None, ......) --> arr
numpy.full(shape, fill_value, dtype = None, ......) --> arr
- shape: 각 차원의 크기. (h, w) 또는 (h, w, 3)
- dtype: 원소의 데이터 타입 . 일반적인 영상이면 numpy.uint8 지정
- arr: 생성된 영상(numpy.ndarray)
- 참고사항
numpy.empty () 함수는 임의의 값으로 초기화된 배열을 생성
numpy.zeros () 함수는 0 으로 초기화된 배열을 생성
numpy.ones () 함수는 1 로 초기화된 배열을 생성
numpy.full () 함수는 fill_value 로 초기화된 배열을 생성
2. 영상의 생성 예제 코드
img1 = np.empty((480, 640), dtype = np.unit8) # grayscale image
img2 = np.zeros((480, 640, 3), dtype =np.uint8) # color image
img3 = np.ones ((480, 640), dtype =np.unit8) * 255 # white
img4 = np.full ((480, 640, 3), (0, 255, 255), dtype =np.unit8) # yellow
3. 영상의 참조 및 복사 예제 코드
img1 = cv2.imread('HappyFish.jpg')
img2 = img1
img3 = img1.copy()
4. 영상의 참조 및 복사 예제 코드
img1 = cv2.imread('HappyFish.jpg')
img2 = img1
img3 = img1.copy()
img1.fill(255)
5. 부분 영상 추출
img1 = cv2.imread('HappyFish.jpg')
img2 = img1[40:120, 30:150] # numpy.ndarray의 슬라이싱
img3 = img1[40:120, 30:150].copy()
img2.fill(0)
스마트인재개발원
4차산업혁명시대를 선도하는 빅데이터, 인공지능, 사물인터넷 전문 '0원' 취업연계교육기관
www.smhrd.or.kr
'Software > OpenCV' 카테고리의 다른 글
세 번째, OpenCV 기초 - 영상 출력 - 국비지원무료교육 (0) | 2022.03.02 |
---|---|
두 번째 OpenCV 기초 - 기초 함수 - 국비지원무료교육 (0) | 2022.02.21 |
첫 번째, OpenCV 기초 - 색 그리고 설치 - 국비지원무료교육 (0) | 2022.02.17 |
맥에 openCV 인스톨이 어려움. (0) | 2021.09.11 |
맥에서 OpenCV 설치 외 (0) | 2021.09.11 |
블로그의 정보
막만들자!
makeany