三种线性滤波和两种非线性滤波的对比

#include<iostream>
#include<opencv2/opencv.hpp>
#define window1 "【结果1】"
#define window  "【原图 】"
#define window2 "【结果2】"
#define window3 "【结果3】"
#define window4 "【结果4】"
#define window5 "【结果5】"

using namespace std;
using namespace cv;

//2.3.
Mat src,dst;
int tbar = 1;
int maxtypebar = 4;//控制滤波类型。
int conttolbar = 3;
int maxctlbar = 40;//控制滤波效果,核的范围。
int x ;

void typeon(int,void*);
void ctlon(int,void*);
void process(void);

//用两个滑动条来控制滤波方式和滤波效果。
int main()
{
	//1.读取原图。
	src = imread("滤波图.jpg");
	resize(src,src,Size(),0.4,0.4);
	imshow(window,src);
	//2.123分别控制方框滤波,均值滤波,高斯滤波。
	//全局变量。
	//3.核的范围最大40.
	
	//4.创建process函数。

	//5.创建滑动条和回调函数。
	namedWindow(window1,1);
	createTrackbar("类型控制",window1,&tbar,maxtypebar,typeon);
	typeon(tbar,0);
	createTrackbar("核大小控制",window1,&conttolbar,maxctlbar,ctlon);
	ctlon(conttolbar,0);






	waitKey();
	return 0;


}

//4.
void process()
{
	x = 2 * conttolbar + 1;
	if (tbar == 0)
	{
		boxFilter(src,dst,-1,Size(x, x));//方形。
		
	}
	else if(tbar==1)
	{
		blur(src,dst,Size(x,x));//均值。

	}
	
	else if(tbar==2)
	{
		GaussianBlur(src,dst, Size(x, x),0,0);//高斯

	}

	else if (tbar == 3)
	{

		medianBlur(src,dst,x);//中值,也能较好的保护边缘,也能够去除噪声,但是效果却没有双边滤波效果好。
	}
	else
	{
		bilateralFilter(src,dst,x,x*2,x/2);//双边滤波器。较好的保护边缘效果,但是对于高频的噪声没法进行过滤。
	}

	imshow(window1,dst);


}

void typeon(int, void*)
{
	process();
}

void ctlon(int,void*)
{
	process();
}

在这里插入图片描述
方形滤波器
均值滤波器
高斯滤波器
中值滤波器

双边滤波器
双边滤波顾名思义,对边缘的保护很好。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值