学习【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波---思维导图笔记

本文参考,@浅墨_毛星云 出品 文章链接: http://blog.csdn.net/poem_qianmo/article/details/23184547

学习【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波,继上一篇线性滤波,发现思维导图对整理知识点很好用,所以这次继续用上,如导图所示:

学习【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波---思维导图笔记_第1张图片

综合示例:(结合上一篇的线性滤波轨迹条,再增加这中值跟双边滤波)上所有代码

#include
#include
#include
#include

using namespace cv;
using namespace std;


//定义全局变量
Mat src,dst1,dst2,dst3,dst4,dst5;
int boxfilterValue=0;
int blurValue=0;
int GaussianBluerValue=0;
int medianBlurValue=0;
int bilateralFilterVaule=0
	;

//分别定义三个滤波变换的回调函数
//1、方框滤波的回调函数
void BoxFilter_on(int,void*)
{
//	dst1=Mat::zeros(src.size(),src.type());//定义目标函数与源函数src尺寸,类型一致
	boxFilter(src,dst1,-1,Size(boxfilterValue+1,boxfilterValue+1),Point(-1,-1),true);//这里Size(),尺寸为什么加1,核的大小不能小于1,而int的值可以为1,所以加1,最小值为1
	if(!dst1.empty())
	{
		imshow("效果图",dst1);
	}
}
//2、均值滤波的回调函数
void blurValue_on(int,void*)
{
	//dst2=Mat::zeros(src.size(),src.type());//定义目标函数与源函数src尺寸,类型一致
	blur(src,dst2,Size(blurValue+1,blurValue+1));//这里Size(),尺寸为什么加1,核的大小不能小于1,而int的值可以为1,所以加1,最小值为1
	if(!dst2.empty())
	{
		imshow("效果图",dst2);
	}
}
//3、高斯滤波的回调函数
void GaussianBluer_on(int,void*)
{
	//dst3=Mat::zeros(src.size(),src.type());//定义目标函数与源函数src尺寸,类型一致
	GaussianBlur(src,dst3,Size(GaussianBluerValue*2+1,GaussianBluerValue*2+1),0,0);//X,Y偏移为0
	if(!dst3.empty())
	{
		imshow("效果图",dst3);
	}
}

//4、中值滤波的回调函数
void medianBlur_on(int,void*)
{
	//dst4=Mat::zeros(src.size(),src.type());//定义目标函数与源函数src尺寸,类型一致
	medianBlur(src,dst4,medianBlurValue*2+1);//7代表核尺寸7*7
	if(!dst4.empty())
	{
		imshow("效果图",dst4);
	}
}

//5、双边滤波的回调函数
void bilateralFilter_on(int,void*)
{
//	dst5=Mat::zeros(src.size(),src.type());//定义目标函数与源函数src尺寸,类型一致
	bilateralFilter(src,dst5,bilateralFilterVaule,bilateralFilterVaule*2,bilateralFilterVaule/2);
	if(!dst5.empty())
	{
		imshow("效果图",dst5);
	}
}

int main()
{
	src=imread("img/zao1.jpg");
	//创建方框滤波核值对应的轨迹条
	dst1=src.clone();
	dst2=src.clone();
	dst3=src.clone();
	dst4=src.clone();
	dst5=src.clone();
	namedWindow("原图");
	imshow("原图",src);
	namedWindow("效果图");
	createTrackbar("方框滤波值","效果图",&boxfilterValue,20,BoxFilter_on);
	createTrackbar("均值滤波值","效果图",&blurValue,40,blurValue_on);
	createTrackbar("高斯滤波值","效果图",&GaussianBluerValue,20,GaussianBluer_on);
	createTrackbar("中值滤波值","效果图",&medianBlurValue,40,medianBlur_on);
	createTrackbar("双边滤波值","效果图",&bilateralFilterVaule,40,bilateralFilter_on);
	BoxFilter_on(boxfilterValue,0);
	blurValue_on(blurValue,0);
	GaussianBluer_on(GaussianBluerValue,0);
	medianBlur_on(medianBlurValue,0);
	bilateralFilter_on(bilateralFilterVaule,0);
	waitKey();
	return 0;
}

原图带噪声如下:

学习【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波---思维导图笔记_第2张图片

方框滤波效果:boxFilter()

学习【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波---思维导图笔记_第3张图片

均值滤波效果:blur()

学习【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波---思维导图笔记_第4张图片

高斯滤波效果:GaussianBlur()

学习【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波---思维导图笔记_第5张图片

中值滤波效果:medianBlur()

学习【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波---思维导图笔记_第6张图片

双边滤波效果:bilateralFilter()

学习【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波---思维导图笔记_第7张图片

你可能感兴趣的:(Opencv)