코드 5-2에서 10행 코드에 주목하기 바랍니다.
Mat dst(src.rows, src.cols, src.type());
사용자가 직접 결과 영상의 픽셀 값을 설정하려면 반드시 적절한 크기와 타입의 결과 영상을 미리 생성해야 합니다. 만약 단순히 Mat dst; 형태로 결과 영상을 저장할 변수를 선언하면 dst 객체는 비어 있는 행렬 객체로 만들어지고, 이 경우 Mat::at() 함수로 dst 영상의 픽셀 값을 참조하려고 하면 에러가 발생합니다. 그러므로 코드 5-2에서는 입력 영상 src와 크기 및 타입이 같은 dst 객체를 미리 생성하였습니다.
밝기 조절을 직접 구현하기 위해 코드 5-2에서는 이중 for 반복문을 이용하여 영상 전체를 스캔하고, for 반복문 안에서 다음 코드를 이용하여 결과 영상의 픽셀 값을 설정하였습니다.
dst.at<uchar>(j, i) = src.at<uchar>(j, i) + 100;
이 코드는 입력 영상에서 (i, j) 좌표에서의 픽셀 값에 100을 더하여 결과 영상의 픽셀 값으로 설정합니다. Mat::at() 함수의 첫 번째 인자가 y축 좌표에 해당하는 j이고, 두 번째 인자가 x축 좌표에 해당하는 i라는 점을 기억하기 바랍니다.
그렇다면 코드 5-2의 brightness2() 함수를 실행하면 어떻게 될까요? 실제로 brightness2() 함수를 실행한 결과를 그림 5-5에 나타냈습니다.
▲ 그림 5-5 포화 연산을 고려하지 않은 영상의 밝기 증가 직접 구현 실행 결과