개발 공부
7강 본문
import numpy as np
import cv2
#이미지의 특정 부분만을 보여지게 할 수 없을까? 가능하다. 이것을 masking이라고 하는데 cv2.bitwise_and 함수를 사용하면 된다.
#이것을 하기위해 opencv의 비트 연산 합수를 사용해봅니다. 비트연산은 이미지에서 특정 영역을 추출할 때 유용하게 사용된다. 예를 들면 이미지에서 바탕을 제거하고, 2개의 이미지를 합치는 경우입니다.
image = cv2.imread('p2.jpg',cv2.IMREAD_UNCHANGED)
cv2.imshow("Original", image)
# 이미지를 위한 배열을 하나 만듭니다. 아래 보면 복잡하게 크기를 정하지요?
#정중한 값을 정하기 위해서입니다. 도형의 정중앙에서 150픽셀크기의 사각형을 만듭니다.
#cv2.rectangle의 마지막은 두께를 표시하는데 -1로 하면 여백이 없는 사각이 만들어 집니다. 한번 번호를 0, 3으로 바꾸어 보세요.
#넓이와 높이에 int를 붙인 이유는 cv2에서 사각을 그릴 때 정수만 받기 때문이다.
mask = np.zeros(image.shape[:2], dtype = "uint8")
(cX, cY) = (int(image.shape[1] / 2), int(image.shape[0] / -1))
cv2.rectangle(mask, (cX - 75, cY - 75), (cX + 75 , cY + 75), 255, -1)
cv2.imshow("Mask", mask)
# 이제 만든 사각형을 합쳐볼까요?
masked = cv2.bitwise_and(image, image, mask = mask)
cv2.imshow("Mask Applied to Image", masked)
cv2.waitKey(0)
# 이제 만든 원을 합쳐볼까요?
mask = np.zeros(image.shape[:2], dtype = "uint8")
cv2.circle(mask, (cX, cY), 100, 255, -1)
masked = cv2.bitwise_and(image, image, mask = mask)
cv2.imshow("Mask", mask)
cv2.imshow("Mask Applied to Image", masked)
cv2.waitKey(0)