寻门OpenCV-02-几种图像平滑算法的实现

OpenCV中有几种算法可以实现图像平滑(模糊)处理,分别是:简单模糊、方框型滤波器、中值滤波器、高斯滤波器、双边滤波器。

#include
#include
#include
using namespace cv;
using namespace std;

//实现几种模糊算法

int main() {
    Mat img = imread("lena.jpg");
    Mat img_blur,img_box,img_Median,img_gs,img_bilateral;
    
    blur(img, img_blur, Size(5,5), Point(-1, -1), 4);//简单模糊
    boxFilter(img, img_box, CV_8U, Size(5, 5), Point(-1, -1), 1, 4);//方框型滤波器
    medianBlur(img, img_Median, 5);//中值滤波器
    GaussianBlur(img, img_gs, Size(5, 5), 0, 0);//高斯滤波器
    bilateralFilter(img, img_bilateral, 5, 10, 10);//双边滤波器
    imshow("lena", img);
    imshow("img_blur", img_blur);
    imshow("img_box", img_box);
    imshow("img_Median", img_Median);
    imshow("img_gs", img_gs);
    imshow("img_bilateral", img_bilateral);
    waitKey(0);
    return 0;
}
  1. 简单模糊
    blur();
    函数原型void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT )

    第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。该函数对通道是独立处理的,且可以处理任意通道数的图片,但需要注意,待处理的图片深度应该为CV_8U, CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
    第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。比如可以用Mat::Clone,以源图片为模板,来初始化得到如假包换的目标图。
    第三个参数,Size类型(对Size类型稍后有讲解)的ksize,内核的大小。一般这样写Size( w,h )来表示内核的大小( 其中,w 为像素宽度, h为像素高度)。Size(3,3)就表示3x3的核大小,Size(5,5)就表示5x5的核大小
    第四个参数,Point类型的anchor,表示锚点(即被平滑的那个点),注意他有默认值Point(-1,-1)。如果这个点坐标是负值的话,就表示取核的中心为锚点,所以默认值Point(-1,-1)表示这个锚点在核的中心。
    第五个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT,我们一般不去管它。
    ————————————————
    原文链接:https://blog.csdn.net/cau_eric/article/details/27378503

  2. 方框型滤波器
    boxFilter();
    函数原型void boxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), boolnormalize=true, int borderType=BORDER_DEFAULT )
  3. 中值滤波器
    medianBlur();
    函数原型void medianBlur(InputArray src, OutputArray dst, int ksize)
    int ksize:滤波模板的尺寸大小,必须是大于1的奇数,如3、5、7……
  4. 高斯滤波器
    GaussianBlur();
    函数原型void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT)
    sigmaX,sigmaY:高斯核函数在X,Y上的标准偏差。如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来。

     

      

  5. 双边滤波器
    bilateralFilter();
    函数原型void bilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT )
    int d: 表示在过滤过程中每个像素邻域的直径范围。如果这个值是非正数,则函数会从第五个参数sigmaSpace计算该值。
    double sigmaColor: 颜色空间过滤器的sigma值,这个参数的值越大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域。

你可能感兴趣的:(寻门OpenCV-02-几种图像平滑算法的实现)