滤波系列:
高斯滤波
高斯核:(不一定是这个值,值由高斯核模版确定)
简单来说,就是将之前图像卷积部分,将核改成高斯核即可,卷积内容参见:
https://blog.csdn.net/dieju8330/article/details/82715183
函数:
void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT);
- src,输入图像,即源图像,填Mat类的对象即可。它可以是单独的任意通道数的图片,但需要注意,图片深度应该为CV_8U,CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
- dst,即目标图像,需要和源图片有一样的尺寸和类型。比如可以用Mat::Clone,以源图片为模板,来初始化得到如假包换的目标图。
- ksize,高斯内核的大小。其中ksize.width和ksize.height可以不同,但他们都必须为正数和奇数(并不能理解)。或者,它们可以是零的,它们都是由sigma计算而来。
- sigmaX,表示高斯核函数在X方向的的标准偏差。
- sigmaY,表示高斯核函数在Y方向的的标准偏差。若sigmaY为零,就将它设为sigmaX,如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来。
- 为了结果的正确性着想,最好是把第三个参数Size,第四个参数sigmaX和第五个参数sigmaY全部指定到。
- borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_DEFAULT。
调用代码:
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace std;
using namespace cv;
void main()
{
Mat srcImage = imread("F:\\opencv_re_learn\\2.jpg");
if (!srcImage.data){
cout << "falied to read" << endl;
system("pause");
return;
}
imshow("srcImage", srcImage);
Mat blurImage;
GaussianBlur(srcImage, blurImage, Size(3, 3), 0);
imshow("Gaussianblur", blurImage);
waitKey(0);
}
实现效果: