더북(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) 좌표 픽셀 값을 각각 p1과 p2 변수에 참조로 받아 옵니다.

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