归一化块滤波器:
输出像素值是核窗口内像素值的均值 ( 所有像素加权系数相等)
blur(src, dst, ksize, anchor, borderType)
src: 输入图像
dst: 输出图像
Size( w,h ): 定义内核大小( w 像素宽度, h 像素高度)
Point(-1, -1): 指定锚点位置(被平滑点), 如果是负值,取核的中心为锚点,如果是缺省也是这个
高斯滤波器:
void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT ) ;
src和dst当然分别是输入图像和输出图像
Ksize为高斯滤波器模板大小
sigmaX和sigmaY分别为高斯滤波在横向和竖向的滤波系数
borderType为边缘扩展点插值类型
中值滤波器:
medianBlur(InputArray src, OutputArray dst, int ksize)
src和dst当然分别是输入图像和输出图像
Ksize为中值滤波器模板大小
双边滤波器:
双边滤波器会依据每个像素及其领域构造一个加权平均值,加权计算包括两部分,
其中第一部分加权方式与高斯平滑中的相同,
第二部分也属于高斯加权,但不是基于中心像素与其他像素的空间距离之上的加权,而是基于其他像素与中心像素的亮度差值的加权。
可以将高斯模糊视为高斯平滑,对相似的像素赋予较高的权重,不相似的像素赋予较小的权重。
bilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace,int borderType=BORDER_DEFAULT )
src和dst当然分别是输入图像和输出图像。
d为每个像素领域的直径,
sigmaColor为颜色空间的标准偏差,
sigmaSpace为坐标空间的标准偏差。
borderType为边缘点插值类型。
代码演示如下:
// 1.1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include"opencv243.h"
using namespace std;
using namespace cv;
Mat dst;
//归一化块滤波器
void blurs(Mat image)
{
blur(image,dst,Size(5,5));
}
//高斯滤波
void Gblur(Mat image)
{
GaussianBlur(image,dst,Size(5,5),0,0);
}
//中值滤波器
void Mblur(Mat image)
{
medianBlur(image,dst,5);
}
//双边滤波
void Bblur(Mat image)
{
bilateralFilter(image,dst,10,40,150);
}
int _tmain(int argc, _TCHAR* argv[])
{
Mat image=imread("C:\\Users\\sony\\Desktop\\Lena.jpg");
if(image.empty())
return -1;
/*blurs(image);
imshow("Normalized Box Filter",dst);*/
/*Gblur(image);
imshow("Gaussian filter",dst);*/
/*Mblur(image);
imshow("Median Filter",dst);*/
Bblur(image);
imshow("Bilteral Filter",dst);
waitKey(0);
return 0;
}