코드 7-5 가우시안 잡음 추가 예제 코드 [ch07/noise]
01 void noise_gaussian() 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 imshow("src", src); 11 12 for (int stddev = 10; stddev <= 30; stddev += 10) { 13 Mat noise(src.size(), CV_32SC1); 14 randn(noise, 0, stddev); 15 16 Mat dst; 17 add(src, noise, dst, Mat(), CV_8U); 18 19 String desc = format("stddev = %d", stddev); 20 putText(dst, desc, Point(10, 30), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255), 1, LINE_AA); 21 imshow("dst", dst); 22 waitKey(); 23 } 24 25 destroyAllWindows(); 26 }
• 3행 lenna.bmp 파일을 그레이스케일 형식으로 불러와 src에 저장합니다.
• 12행 표준 편차 stddev 값이 10, 20, 30이 되도록 for 반복문을 수행합니다.
• 13~14행 평균이 0이고 표준 편차가 stddev인 가우시안 잡음을 생성하여 noise 행렬에 저장합니다. 이때 noise 행렬은 부호 있는 정수형(CV_32SC1)을 사용하도록 미리 생성하여 randn() 함수에 전달합니다.
• 17행 입력 영상 src에 가우시안 잡음 noise를 더하여 결과 영상 dst를 생성합니다. dst 영상의 깊이는 CV_8U로 설정합니다.