Opencv2.4学习::滤波(3)高斯滤波

滤波系列:

  1. 均值滤波

  2. 中值滤波
  3. 高斯滤波
  4. 双边滤波

 高斯滤波

 高斯核:(不一定是这个值,值由高斯核模版确定)

这里写图片描述

简单来说,就是将之前图像卷积部分,将核改成高斯核即可,卷积内容参见:

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

实现效果:

猜你喜欢

转载自blog.csdn.net/dieju8330/article/details/82726077