zoukankan      html  css  js  c++  java
  • 图像模糊操作

    1.均值滤波

    blur(Mat src,Mat dst,Size(xradius,yradius),Point(-1,-1));

    输入图像,输出图像,滤波器大小,默认中心点(一般不做修改)

    2.高斯滤波

    GaussianBlur(Mat src,Mat dst,Size(x,y),sigmax,sigmay);

    输入图像,输出图像,滤波器大小,x方向上的σ大小,y方向上的σ大小

    #include"pch.h"
    #include<iostream>
    #include<opencv2/opencv.hpp>
    
    using namespace std;
    using namespace cv;
    
    int main(int argc, char **argv)
    {
        Mat src,dst1,dst2;
        src = imread("b.jpg");
        if (src.empty())
        {
            cout << "Load img failed..." << endl;
            return -1;
        }
        imshow("input image", src);
    
        blur(src, dst1, Size(5,5), Point(-1, -1));
        imshow("blur img", dst1);
    
        GaussianBlur(src, dst2, Size(5,5), 11, 11);
        imshow("Gaussian blur img", dst2);
        waitKey(0);
        return 0;
    }

    3.中值滤波

    对抑制椒盐噪声有很好的效果(去除噪点)

    对滤波器内的像素点进行排序,取中值代替中心像素点,同理也会有最大值最小值滤波

    mddianBlur(Mat src,Mat dst,ksize)

    ksize大于1且必须为基数

    4.双边滤波

    均值模糊会导致边缘像素信息丢失,因为均值滤波是基于平均权重

    高斯滤波一定程度上改善了这一问题,但无法完全解决,因为没有考虑到像素值的不同

    高斯双边模糊是边缘保留的滤波方法,避免了边缘信息的丢失,保留了图像轮廓不变(磨皮效果)

    像素点值的高差没有被抹去,只是使得相同高度的区域变得更加平缓

    bilateralFilter(src,dst,d=15,150,3)

    15表示计算半径,半径之内的像素点都会纳入计算

    150表示像素值的差,如果像素之差在150之内都会被计算

    3 d值必须大于0否则声明无效,否则用它来计算d值

     双边滤波加上掩膜操作就是美图的美颜操作

    #include<iostream>
    #include<opencv2/opencv.hpp>
    
    using namespace std;
    using namespace cv;
    
    int main(int argc, char **argv)
    {
        Mat src,dst1,dst2;
        src = imread("c.jpg");
        if (src.empty())
        {
            cout << "Load img failed..." << endl;
            return -1;
        }
        imshow("input image", src);
    /*
        blur(src, dst1, Size(5,5), Point(-1, -1));
        imshow("blur img", dst1);
    
        //GaussianBlur(src, dst2, Size(5,5), 11, 11);
        //imshow("Gaussian blur img", dst2);
        
        medianBlur(src, dst1, 3);
        imshow("median Blur img", dst1);
    */
        bilateralFilter(src, dst2, 15, 150, 3);
        imshow("bilateral Blur img", dst2);
    
        Mat resImg;
        Mat Kernel = (Mat_<int>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
        filter2D(dst2, resImg, -1, Kernel, Point(-1, -1), 0);
        imshow("Final Result", resImg);
    
        waitKey(0);
        return 0;
    }

  • 相关阅读:
    MDK软件2020年到期和谐方法
    TinyMCE插件CodeSample前后端应用
    KEIL MDK编译后的代码量和RAM使用详解
    pdf密码解除工具
    Keil c中自定义带可变参数的printf函数
    关于"云服务器被检测到对外攻击已阻断该服务器对其它服务器端口的访问"的解决措施
    在 __CC_ARM 编译器环境下,使用$Sub$$ 与 $Super$$ 的“补丁”功能
    thinkphp前台html格式化输出日期
    ELINK编程器典型场景之序列号烧写
    数据在数组中存储的顺序:小端 OR 大端模式 详解
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/12053095.html
Copyright © 2011-2022 走看看