본문 바로가기
OpenCV

[OpenCV] 마스크 연산 / ROI

by ram_ 2023. 3. 2.

마스크 연산

  • OpenCV는 일부 함수에 대해 ROI 연산을 지원하며, 이때 마스크 영상 (mask Image)을 인자로 함께 전달해야 한다.
    • e.g) cv2.copyTo(), cv2.calcHist(), cv2.bitwise_or(), cv2.matchTemplate(), etc.
  • 마스크 영상은 cv2.CV_8UC1 타입이다.(그레이스테일 영상)
  • 마스크 영상의 픽셀 값이 0이 아닌 위치에서만 연산이 수행된다.
    • 보통 마스크 영상으로는 0 또는 255로 구성된 이진 영상(binary image)을 사용한다.

관심 영역 (ROI)

  • Region Of Interest
  • 영상에서 특정 연산을 수행하고자 하는 임의의 부분 영역이다.

 


마스크 연산을 지원하는 픽셀 값 복사 함수

cv2.copyTo(src, mask, dst=None) -> dst
  • src : 입력 영상
    • color - grayscale 다 가능하다. 
  • mask : 마스크 영상
    • 보통은 흰색과 검정색으로 구성된 흑백영상이어야 한다.
    • cv2.CV_8U. (numpy.uint8).  0이 아닌 픽셀에 대해서만 복사 연산을 수행한다.(흰색 부분만 복사)
    • 즉, mask를 잘 사용하면 일부 영역만 복사가 가능하다. 
  • dst : 출력 영상. 
    • color - grayscale 다 가능하다. 
    • 만약 src와 크기 및 타입이 같은 dst를 입력으로 지정하면 dst를 서로 생성하지 않고 연산을 수행한다. 그렇지 않으면 dst를 새로 생성하여 연산을 수행한 후 반환한다. 

 

결과값을 보면, airplane에서 mask부분을 복사해와서 dst에 붙여넣기 된 사진을 확인 가능하다. 

dst[mask > 0] = src[mask > 0]을 사용해도 같은 결과값을 얻을 수 있다.