더북(TheBook)

4.5.1 마스크 연산

앞서 3.2.4절에서 부분 행렬 추출 기능을 이용하여 영상에 사각형 ROI를 설정하는 방법에 대해 설명했습니다. 그러나 경우에 따라서는 사각형이 아닌 임의의 ROI 설정이 필요하기도 합니다. OpenCV에서는 임의의 모양을 갖는 ROI 설정을 위하여 일부 행렬 연산 함수에 대하여 마스크(mask) 연산을 지원합니다. 마스크 연산을 지원하는 OpenCV 함수는 보통 입력 영상과 크기가 같고 깊이가 CV_8U인 마스크 영상을 함께 인자로 전달받습니다. 마스크 영상이 주어질 경우, 마스크 영상의 픽셀 값이 0이 아닌 좌표에 대해서만 연산이 수행됩니다. 일반적으로 마스크 영상은 사람의 눈으로도 구분이 쉽도록 픽셀 값이 0 또는 255로 구성된 흑백 영상이 사용됩니다.

몇 가지 마스크 연산을 지원하는 함수를 살펴보면서 마스크 연산 방법에 대해 알아보겠습니다. 앞서 3.2.2절에서 행렬의 픽셀 값을 설정하기 위해 Mat::setTo() 멤버 함수를 사용했습니다. Mat::setTo() 함수는 마스크 연산을 지원하는 함수이며, 이 함수의 원형을 다시 쓰면 다음과 같습니다.

Mat& Mat::setTo(InputArray value, InputArray mask = noArray());

value

행렬 원소에 설정할 값

mask

마스크 행렬. 마스크 행렬의 원소가 0이 아닌 위치에서만 value 값이 설정됩니다. 행렬 전체 원소 값을 설정하려면 noArray() 또는 Mat()을 지정합니다.

반환값

Mat 객체의 참조

 

Mat::setTo() 함수의 두 번째 인자 mask에 마스크 영상을 지정할 수 있습니다. 기본값으로 설정되어 있는 noArray()mask 인자로 지정하면 입력 행렬의 모든 원소 값을 value 값으로 설정하고, 적절한 마스크 영상을 mask 인자로 지정하면 특정 영역에 대해서만 픽셀 값을 설정할 수 있습니다. 이때 마스크 영상은 Mat::setTo()를 호출하는 대상 행렬과 크기가 같아야 합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.