더북(TheBook)

코드 10-1 컬러 영상의 픽셀 값 반전 [ch10/ColorOp]

01    void color_inverse()
02    {
03        Mat src = imread("butterfly.jpg", IMREAD_COLOR);
04     
05        if (src.empty()) {
06            cerr << "Image load failed!" << endl;
07            return;
08        }
09     
10        Mat dst(src.rows, src.cols, src.type());
11     
12        for (int j = 0; j < src.rows; j++) {
13            for (int i = 0; i < src.cols; i++) {
14                Vec3b& p1 = src.at<Vec3b>(j, i);
15                Vec3b& p2 = dst.at<Vec3b>(j, i);
16     
17                p2[0] = 255 - p1[0]; // B
18                p2[1] = 255 - p1[1]; // G
19                p2[2] = 255 - p1[2]; // R
20            }
21        }
22     
23        imshow("src", src);
24        imshow("dst", dst);
25     
26        waitKey();
27        destroyAllWindows();
28    }

 

3행 butterfly.jpg 파일을 3채널 BGR 컬러 영상으로 불러와서 src에 저장합니다.

10행 반전된 영상을 저장할 dst 영상을 생성합니다. dst 영상의 모든 픽셀 값은 이후 for 반복문에서 설정할 것이므로 초깃값은 따로 지정하지 않았습니다.

14~15행 src와 dst 영상의 (i, j) 좌표 픽셀 값을 각각 p1p2 변수에 참조로 받아 옵니다.

17~19행 p1 픽셀의 세 개 색상 성분 값을 모두 반전시켜 p2 픽셀 값으로 설정합니다.

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