728x90
728x90
OpenCV는 영상 데이터를 numpy.ndarray로 표현
img1 = cv2.imread('cat.bmp', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('cat.bmp', cv2.IMREAD_COLOR)
img1, img2 = np.ndarray
- ndim: 차원 수. len(img.shape)과 같음.
- shape: 각 차원의 크기. (h, w)= gray 또는 (h, w, 3) = color
- size: 전체 원소 개수
- dtype: 원소의 데이터 타입. 영상 데이터는 uint8.
그레이스케일 영상: cv2.CV_8UC1 → numpy.uint8, shape = (h, w)
컬러 영상: cv2.CV_8UC3 → numpy.uint8, shape = (h, w, 3)
영상생성
img1 = np.empty((480, 640), dtype=np.uint8) # grayscale image
img2 = np.zeros((480, 640, 3), dtype=np.uint8) # color image(but black image)
img3 = np.ones((480, 640), dtype=np.uint8) * 255 # white(연산 가능)
img4 = np.full((480, 640, 3), (0, 255, 255), dtype=np.uint8) # yellow
'''
▪ numpy.empty() 함수는 임의의 값으로 초기화된 배열을 생성
▪ numpy.zeros() 함수는 0으로 초기화된 배열을 생성
▪ numpy.ones() 함수는 1로 초기화된 배열을 생성
▪ numpy.full() 함수는 fill_value로 초기화된 배열을 생성
'''
--> arr(np.ndarray)
영상 참조
img1 = cv2.imread('HappyFish.jpg')
img2 = img1[40:120, 30:150] # numpy.ndarray의 슬라이싱
img3 = img1[40:120, 30:150].copy()
img2.fill(0)
'''
img2.fill(0) ==
img2[:, :] = (0, 0, 0)
img2, img1이 서로 공유하고 있기 때문에 img1에 crop부분 검은색
'''
Mask연산과 ROI(Region of Interest, 관심영역)
- Region of Interest, 관심 영역(사과의 흰색부분)
- 영상에서 특정 연산을 수행하고자 하는 임의의 부분 영역
이미지를 처리함에 있어서 객체를 탐지하거나 검출하는 경우,
이부분을 명확하게 관심 영역이라 지정할 수 있다.
Mask 연산
OpenCV는 일부 함수에 대해 ROI 연산을 지원하며, 이때 마스크 영상을 인자로 함께 전달해야 함
(e.g.) cv2.copyTo(), cv2.calcHist(), cv2.bitwise_연산, cv2.matchTemplate(), etc
마스크 영상은 cv2.CV_8UC1 타입(그레이스케일 영상)
마스크 영상의 픽셀 값이 0이 아닌 위치에서만 연산이 수행됨(255 흰색에서만 연산)
==> 마스크 영상으로는 0 또는 255로 구성된 이진 영상(binary image)을 사용
src = cv2.imread('airplane.bmp', cv2.IMREAD_COLOR)
mask = cv2.imread('mask_plane.bmp', cv2.IMREAD_GRAYSCALE)
dst = cv2.imread('field.bmp', cv2.IMREAD_COLOR)
cv2.copyTo(src, mask, dst)
'''
src, mask, dst는 모두 크기가 같아야 함.
src와 dst는 같은 타입이어야 하고, mask는 그레이스케일 타입의 이진 영상
'''
# NumPy의 불리언 인덱싱(Boolean indexing)을 이용한 마스크 연산
dst[mask > 0] = src[mask > 0]
728x90
'OpenCV > OpenCV-Chapter' 카테고리의 다른 글
CH03 Opencv-Python Histogram, Contrast (0) | 2021.12.18 |
---|---|
CH03 Opencv-Python 영상 처리 기법(화소, 연산) (0) | 2021.12.18 |
CH02 OpenCV-Python 기초(도형그리기) (0) | 2021.12.18 |
CH01 OpenCV-Python(Image? OpenCV?) (0) | 2021.12.18 |
CH01 OpenCV-Python(Computer Vision) (0) | 2021.12.18 |
댓글