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

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