0

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

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

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

4

1 回答 1

-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;
}

链接-

链接 1

链接2

于 2017-06-23T10:46:13.947 回答