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

  • 相关阅读:
    作业2019.1.15
    面向对象
    Arrays类的常用方法
    堆和栈的区别
    吃货联盟订餐系统
    解决Navicat连接MySQL出现1251-Client does not support authentication protocol requested by server;
    k-进制数
    怎么用宝塔面板搭建一个网站?
    Win10启动修复无法修复你的电脑解决方法
    java HashMap怎么用
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/12053095.html
Copyright © 2011-2022 走看看