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

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

  • 相关阅读:
    sqlite3获取所有表信息
    top高级技能
    python xlwt写excel格式控制 颜色、模式、编码、背景色
    python操作Excel的几种方式
    eclispe: 修改所有文件默认编码为UTF-8
    Fragment: 使用newInstance()来实例化fragment(转)
    Java: 线程池(ThreadPoolExecutor)中的参数说明
    android : 解决android无法使用sun.misc.BASE64Encoder sun.misc.BASE64Decoder 的问题, 无需添加rt.jar
    蓝牙BLE: ATT协议层中属性(Attribute)
    蓝牙BLE: ATT和GATT的概念
  • 原文地址:https://www.cnblogs.com/xieyulin/p/7060937.html
Copyright © 2011-2022 走看看