本文参考,@浅墨_毛星云 出品 文章链接: http://blog.csdn.net/poem_qianmo/article/details/23184547
学习【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波,继上一篇线性滤波,发现思维导图对整理知识点很好用,所以这次继续用上,如导图所示:
综合示例:(结合上一篇的线性滤波轨迹条,再增加这中值跟双边滤波)上所有代码
#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;
}
方框滤波效果:boxFilter()
均值滤波效果:blur()
高斯滤波效果:GaussianBlur()
中值滤波效果:medianBlur()
双边滤波效果:bilateralFilter()