코드 4-16의 mask_setTo() 함수 실행 결과를 그림 4-15에 나타냈습니다. 그림 4-15의 오른쪽에 나타난 mask 영상은 중앙에 웃는 얼굴 부분이 흰색으로 설정되어 있고, 나머지 영역은 픽셀 값 0에 해당하는 검은색으로 채워져 있습니다. 마스크 영상에서 흰색으로 표시된 영역에 대해서만 레나 영상 픽셀이 노란색으로 설정된 것을 확인할 수 있습니다.
▲ 그림 4-15 마스크 연산을 이용한 픽셀 값 설정 예제 실행 결과
마스크 연산을 지원하는 함수를 하나 더 살펴보겠습니다. 앞서 3.2.3절에서 설명한 행렬 복사 함수 중에 Mat::copyTo() 함수가 있었는데요, 사실 Mat::copyTo() 함수는 두 가지 형태로 정의되어 있습니다. 하나는 복사할 대상 행렬 하나만 인자로 받고, 다른 하나는 복사할 대상 행렬과 마스크 영상 두 개를 인자로 받습니다. 마스크 연산을 지원하는 Mat::copyTo() 함수 원형은 다음과 같습니다.
void Mat::copyTo(OutputArray m, InputArray mask) const; |
|
• m |
복사본이 저장될 행렬. 만약 *this 행렬과 크기 및 타입이 다르면 메모리를 새로 할당한 후 픽셀 값을 복사합니다. |
• mask |
마스크 행렬. 마스크 행렬 원소 값이 0이 아닌 좌표에서만 행렬 원소를 복사합니다. mask 행렬은 *this와 같은 크기이고 깊이는 CV_8U이어야 합니다. |