OpenCV中的GaussianBlur函数如何工作

时间:2017-06-23 10:34:33

标签: opencv gaussianblur

我想问一下我在哪里可以找到如何实现OpenCV中的GaussianBlur函数。 在查看源代码时,我只能找到这个file,但我正在寻找卷积完成的代码。 例如:

 for x to picture.rows
    for y to picture.cols
       for r to mask.width
         for c to mask.cols 
            do convolution

OpenCV GaussianBlur是否计算每个像素的卷积或类似每秒像素的加速度?

1 个答案:

答案 0 :(得分:-1)

下面是几个实现高斯滤波器的链接我希望它可以帮到你。

示例代码 -

int main( int argc, char** argv )
{
    //create 2 empty windows
    namedWindow( "Original Image" , CV_WINDOW_AUTOSIZE );
    namedWindow( "Smoothed Image" , CV_WINDOW_AUTOSIZE );

    // Load an image from file
    Mat src = imread( "MyPic.JPG", CV_LOAD_IMAGE_UNCHANGED );

    //show the loaded image
    imshow( "Original Image", src );

    Mat dst;
    char zBuffer[35];

    for ( int i = 1; i  <  31; i = i + 2 )
    {
        //copy the text to the "zBuffer"
        _snprintf_s(zBuffer, 35,"Kernel Size : %d x %d", i, i);

        //smooth the image using Gaussian kernel in the "src" and save it to "dst"
        GaussianBlur( src, dst, Size( i, i ), 0, 0 );

        //put the text in the "zBuffer" to the "dst" image
        putText( dst, zBuffer, Point( src.cols/4, src.rows/8), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255), 2 );

        //show the blurred image with the text
        imshow( "Smoothed Image", dst );

        //wait for 2 seconds
        int c = waitKey(2000);

        //if the "esc" key is pressed during the wait, return
        if (c == 27)
        {
            return 0;
        }
    }

    //make the "dst" image, black
    dst = Mat::zeros( src.size(), src.type() );

    //copy the text to the "zBuffer"
    _snprintf_s(zBuffer, 35,"Press Any Key to Exit");

    //put the text in the "zBuffer" to the "dst" image
    putText( dst, zBuffer, Point( src.cols/4,  src.rows / 2), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255) );

    //show the black image with the text
    imshow( "Smoothed Image", dst );

    //wait for a key press infinitely
    waitKey(0);

    return 0;
}

链接 -

Link 1

Link2