부분 영상 추출 시 픽셀 데이터를 공유한다는 특성을 이용하면 입력 영상의 일부분에만 특정한 영상 처리를 수행할 수 있습니다. 아직 OpenCV 라이브러리를 이용한 영상 처리 기법에 대해 설명할 단계는 아니지만 간단하게 테스트해 볼 수 있는 기법 중에 영상의 반전이 있습니다. 영상의 반전은 밝은 픽셀은 어둡게 만들고, 어두운 픽셀은 밝게 변화시키는 밝기 변환 기법입니다. 3채널 컬러 영상의 경우에는 각각의 색상 성분에 대해 반전을 수행합니다. 영상의 반전은 Mat 클래스 타입의 변수 앞에 ~ 연산자를 붙이는 방식으로 쉽게 적용할 수 있습니다.9 예를 들어 앞서 구한 부분 영상 img2를 반전시키려면 다음과 같이 코드를 작성합니다.
img2 = ~img2;
이 코드는 img2 영상을 반전하여 그 결과를 다시 img2에 저장합니다. 실제로 코드를 실행한 후 다시 img1과 img2 영상을 출력하면 그림 3-5와 같이 나타납니다. 그림 3-5에서 img2 영상 전체가 반전이 되었고, 더불어 img1 영상에서 고양이 얼굴 주변의 부분 영상만 반전되어 나타나는 것을 확인할 수 있습니다.
▲ 그림 3-5 부분 영상 추출 후 영상 반전 결과
9 원래 Mat 객체에 저장된 3채널 컬러 영상을 반전하려면 Scalar(255, 255, 255)에서 해당 변수를 빼는 연산을 수행해야 합니다. 즉, img2 영상을 반전하려면 img2 = Scalar(255, 255, 255) - img2; 형태로 코드를 작성하는 것이 정석입니다. 원래 ~ 연산자는 비트 단위 부정(NOT) 연산을 수행하지만, uchar 자료형을 사용하는 Mat 영상에 대해서는 ~ 연산자가 반전과 같은 역할을 수행합니다. 이 부분에 대한 추가적인 설명은 6.2절을 참고하기 바랍니다.