zoukankan      html  css  js  c++  java
  • OpenCV探索之路(三):滤波操作

    滤波处理分为两大类:线性滤波和非线性滤波。OpenCV里有这些滤波的函数,使用起来非常方便,现在简单介绍其使用方法。

    线性滤波:方框滤波、均值滤波、高斯滤波

    方框滤波

    #include<opencv2opencv.hpp>   
    #include<opencv2highguihighgui.hpp>
    
    using namespace std;
    using namespace cv;
    
    
    int main()
    {
        Mat img = imread("lol4.jpg");
        imshow("原始图", img);
        Mat out;
        boxFilter(img, out, -1, Size(5, 5));//-1指原图深度
        imshow("方框滤波", out);
        waitKey(0);
    
    }

    均值滤波
    均值滤波就是方框滤波的一个特殊情况。
    均值滤波的缺点就是不能很好地保护细节,在图像去燥的同时也破坏了图像的而细节部分,从而使图像变得模糊,不能很好的去除噪点。

    #include<opencv2opencv.hpp>   
    #include<opencv2highguihighgui.hpp>
    
    using namespace std;
    using namespace cv;
    
    
    int main()
    {
        Mat img = imread("lol4.jpg");
        imshow("原始图", img);
        Mat out;
        blur(img, out,Size(5, 5));//-1指原图深度
        imshow("均值滤波", out);
        waitKey(0);
    
    }

    高斯滤波
    高斯滤波,可以消除高斯噪声,广泛应用于图像处理的减噪过程。

    #include<opencv2opencv.hpp>   
    #include<opencv2highguihighgui.hpp>
    
    using namespace std;
    using namespace cv;
    
    
    int main()
    {
        Mat img = imread("lol4.jpg");
        imshow("原始图", img);
        Mat out;
        GaussianBlur(img, out, Size(3, 3), 0, 0);
        imshow("高斯滤波", out);
        waitKey(0);
    
    }

    从效果看出,高斯滤波的而模糊感明显降低

    非线性滤波:中值滤波、双边滤波

    中值滤波

    基本思想就是用像素点的领域灰度的中值来代替该像素点的灰度值,该方法在去除脉冲噪声、椒盐噪声的同时又能保留图像的细节(不会出现边缘模糊的情况)

    中值滤波跟均值滤波的思想看起来很相似,只是一个取平均值,一个取中位数而已

    #include<opencv2opencv.hpp>   
    #include<opencv2highguihighgui.hpp>
    
    using namespace std;
    using namespace cv;
    
    //中值滤波
    int main()
    {
        Mat img = imread("lol4.jpg");
        imshow("原始图", img);
        Mat out;
        medianBlur(img, out, 7);//第三个参数表示孔径的线性尺寸,它的值必须是大于1的奇数
        imshow("中值滤波", out);
        waitKey(0);
    
    }

    现在说说中值滤波与均值滤波的比较:均值滤波中噪声成分会被加入到平均计算,所以输出是受到噪声的影响的。但是中值滤波中,由于噪声成分很难选上,所以基本不影响输出。当然好的性能也需要付出一点代价的,中值滤波花费的时间是均值滤波的5倍以上。

    中值滤波一般采用奇数的卷积核。

    中值滤波对一些细节多(特别是细、尖顶的)的图像不太适合。

    双边滤波

    双边滤波的最大特点就是做边缘保存。

    #include<opencv2opencv.hpp>   
    #include<opencv2highguihighgui.hpp>
    
    using namespace std;
    using namespace cv;
    
    //双边滤波
    int main()
    {
        Mat img = imread("lol4.jpg");
        imshow("原始图", img);
        Mat out;
        bilateralFilter(img, out, 25, 25 * 2, 25 / 2);
        imshow("双边滤波", out);
        waitKey(0);
    
    }

    效果图看来,双边滤波是所有滤波中最清晰的。

  • 相关阅读:
    08.net网站开发(前端):5.jQuery
    weblogic的ejb远程调用
    UVa 10131: Is Bigger Smarter?
    Qt5 FOR WINCE7, Visual Studio 2008环境的搭建
    Web常见安全漏洞原理及防范-学习笔记
    【转载】Spark学习 & 机器学习
    公司hadoop客户端试用
    Zen of Python(Python的19条哲学)
    【转载】GitHub中国区前100名到底是什么样的人
    【转载】Spark学习——入门
  • 原文地址:https://www.cnblogs.com/xieyulin/p/7060937.html
Copyright © 2011-2022 走看看