더북(TheBook)

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

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.