5.1.3 영상의 밝기 조절 직접 구현하기
앞 절에서 OpenCV가 제공하는 덧셈과 뺄셈 연산자 재정의를 이용하여 영상의 밝기를 조절하는 방법을 배웠습니다. 만약 OpenCV가 제공하는 연산자 함수를 사용하지 않고 여러분이 직접 영상의 밝기 조절 코드를 작성하려면 어떻게 해야 할까요? Mat 행렬의 원소 값 참조 방법을 사용하면 어렵지 않게 밝기 조절을 직접 구현할 수 있습니다. 즉, 입력 영상의 모든 픽셀을 방문하면서 픽셀 값에 일정한 상수를 더하거나 빼면 밝기 조절이 적용됩니다. 코드 5-2는 픽셀 값을 직접 참조하여 레나 영상의 밝기를 100만큼 증가시키는 예제 코드입니다.
코드 5-2 포화 연산을 고려하지 않은 영상의 밝기 증가 직접 구현 [ch05/brightness]
01 void brightness2() 02 { 03 Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE); 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 dst.at<uchar>(j, i) = src.at<uchar>(j, i) + 100; 15 } 16 } 17 18 imshow("src", src); 19 imshow("dst", dst); 20 waitKey(); 21 22 destroyAllWindows(); 23 }
• 3행 lenna.bmp 레나 영상을 그레이스케일 형태로 불러와 src에 저장합니다.
• 10행 입력 영상 src와 크기, 타입이 같은 결과 영상 dst를 생성합니다.
• 12~16행 영상 전체를 스캔하면서 입력 영상의 픽셀 값에 100을 더하여 결과 영상 픽셀 값으로 설정합니다.