#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 = 2;//控制滤波类型。
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,2,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
{
GaussianBlur(src,dst, Size(x, x),0,0);
}
imshow(window1,dst);
}
void typeon(int, void*)
{
process();
}
void ctlon(int,void*)
{
process();
}