코드 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 픽셀 값으로 설정합니다.