안녕하세요! 오늘은 이미지의 특정 부분만 보이게 하는 이미지 마스킹에 대해 알아보겠습니다!
이미지 마스킹을 공부하기에 앞서 이미지 임계값 처리에 대한 내용에 대한 선 학습이 필요한데요,
2022.10.05 - [AI, 빅데이터/AI] - OpenCV - 이미지 트리밍 / 변환
임계값 처리하는 cv2.threshold에 대한 부분 먼저 읽고 오시면 좋을 것 같네요
OpenCV에서는 2진수 연산을 허용합니다.
이미지 처리에서 왠 2진수 연산이냐구요?
지금부터 차근차근 응용 방법에 대해 설명드리겠습니다.
OpenCV에서는 2개 혹은 한 개의 이미지에 대하여 2진수 연산을 수행합니다.
여기서 2개는 AND, OR, XOR에 해당하고, 한 개는 NOT 연산에 해당합니다.
이를 처리하는 함수로는
cv2.bitwise_and(img1,img2,mask)
cv2.bitwise_or(img1,img2,mask)
cv2.bitwise_xor(img1,img2,mask)
cv2.bitwise_not(img1)
각각 위에서 말한 and, or, xor, not 연산에 대한 함수가 있습니다.
여기서 mask 파라미터는 적용 영역 지정을 말합니다.
먼저 검은색 이미지를 만들어보겠습니다!
이미지 만드는 내용 또한 이전 포스팅 참고하시면 좋을 것 같네요
2022.10.05 - [AI, 빅데이터/AI] - OpenCV - 색 지정 / 선 / 도형 그리기
검은색 이미지 만들기
np.zeros((300,500),np.uint8)
300x500 크기의 행렬을 1바이트인 정수 0으로 채웁니다
이후, 연산을 확인하기 위한 간단한 원을 만들어주겠습니다.
A = np.zeros((300,500),np.uint8)
A = cv2.circle(A,(200,150),100,255,-1)
B = np.zeros((300,500),np.uint8)
B = cv2.circle(B,(300,150),100,255,-1)
circle에 해당하는 영역이 흰색이겠죠?
이제 연산을 해보면,
image1 = cv2.bitwise_and(A,B)
image2 = cv2.bitwise_or(A,B)
image3 = cv2.bitwise_xor(A,B)
image4 = cv2.bitwise_not(A)
의 결과가 나오네요
뭔가 이상하죠?
여기서 or 연산보다 and 연산이 더 작네요.
OpenCV는 검은색에 대한 and 연산을 수행합니다.
이점 유의하시길 바랍니다!
이렇게 배운 내용을 어떻게 써먹을까요? 그래서 2진수가 뭐 어쨌다는 걸까요?
print(img.shape[:2])
msk = np.zeros(img.shape[:2],np.uint8)
msk[2000:3500,2000:3000]=255 #흰색
cv2_imshow(msk)
색이 있는 이미지의 경우 3차원입니다.
우리는 2차원 연산을 수행할 것이기 때문에 img의 사이즈만 가져와서 사용하겠습니다.
이미지 전체를 검은색으로 만든 후, 특정 영역을 지정하여 흰색으로 지정합니다.
result_img = cv2.bitwise_and(img,img,mask=msk)
cv2_imshow(result_img)
이후 이 흰 부분과 원래 이미지와 and 연산을 하면 어떻게 될까요?
위의 and 연산의 그림을 보면 검은색에 먹히게 됐었죠?
이미지와 흰색의 and 연산을 하면 그 특정 부분의 이미지만 마스킹돼서 나오게 됩니다.
이미지를 다른 이미지의 검은색이라고 생각했을 때, 흰색이 0이고 그림이 1이라면 그 부분의 and 연산은 1이 됩니다.
따라서 흰 마스킹 부분에 그림이 들어갈 수 있습니다.
이렇게 봐도 이걸 언제 사용하는지 잘 모르실 것이라고 생각됩니다.
다음 글에서는 조금 더 왜 2진수 연산을 사용하는지에 대한 글을 가져오도록 하겠습니다!
감사합니다
'AI > AI' 카테고리의 다른 글
[AI] Perceptron (0) | 2022.11.07 |
---|---|
[AI] K-Nearest Neighbors 직접 구현 (0) | 2022.10.19 |
[AI] OpenCV - 이미지 트리밍 / 변환 (3) | 2022.10.05 |
[AI] OpenCV - 색 지정 / 선 / 도형 그리기 (3) | 2022.10.05 |
[AI] Linear Regression 직접 구현 / 라이브러리 이용하여 구현 (1) | 2022.09.28 |