opencv 高斯滤波

GaussianBlur函数的作用是用高斯滤波器来模糊一张图片,对输入的图像src进行高斯滤波之后用dst输出。

void GaussianBlur(InputArray src,OutputArray dst,Size ksize,double sigmaX,double sigmaY=0,intborderType=BORDER_DEFAULT)

第一个参数:InputArray类型的src,输入图像,填Mat类的对象即可。它可以是单独的任意通道数的图片。但需要注意,图片的深度应该为

CV_8U,CV_16U,CV_16S,CV_32F,CV_64F之一。

第二个参数:OutputArray类型的dst,即目标图像,需要和源图像有一样的尺寸和类型。比如可用Mat::Clone,以源图像为模板,来初始化得到目标图

第三个参数:Size类型的ksize高斯内核大小,其中ksize.width和ksize.heigt可用不同,但它们都必须为正数和奇数(这点很重要)

也可以为零。它们都是有sigma计算而来的。

第四个参数:都崩了类型的sigmaX,表示高斯函数在X方向的标准偏差。

第五个参数:double类型的sigmaY,表示高斯函数在Y方向的标准偏差。

第六个参数:int类型的borderType,用于腿短图像外部像素的某种边界模式。有默认值BORDER_DERAULT。


下面是一个应用高斯函数的例子,可通过滑动条来控制内核的大小。

#include "stdafx.h"
#include <iostream>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"
using namespace std;
using namespace cv;


int g_nGaussianBlurValue = 3;
Mat g_srcImage, g_dstImage;
static void on_GaussianBlur(int , void *);
int main()
{
g_srcImage = imread("E:/VS2017Projects/rect2/rect2/photo/1.jpg",1);
if (!g_srcImage.data)
{
printf("读取图片失败! \n");
return false;
}
g_dstImage = g_srcImage.clone();
namedWindow("原图");
imshow("原图", g_srcImage);
        namedWindow("高斯滤波");
createTrackbar("内核值", "高斯滤波", &g_nGaussianBlurValue, 30, on_GaussianBlur);
on_GaussianBlur(g_nGaussianBlurValue,0);
waitKey(0);
return 0;
}
static void on_GaussianBlur(int , void *)
{
GaussianBlur(g_srcImage, g_dstImage, Size(g_nGaussianBlurValue*2+1, g_nGaussianBlurValue*2+1 ), 0, 0);//内核值都必须为正数和奇数
imshow("高斯滤波", g_dstImage);
}

运行效果如下:

opencv 高斯滤波