#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#define WINDOWS_NAME1 "【原图窗口】"//设置窗口名
#define WINDOWS_NAME2 "【中值滤波窗口】"
using namespace cv;
using namespace std;
int medianBlurValue = 1;//设置中值滤波初始值
int maxMedianBlurValue = 4;//设置最大值
void on_MedianBlur(int, void*);//回调函数
Mat srcImage, dstImage;//用于接收图像
int main()
{
cout << "调节轨迹条可以改变【中值滤波】内核大小" << endl;
cout << "按下ESC退出程序!" << endl;
system("color 3E");//设置控制台窗口背景色
srcImage = imread("stars.jpg");//读取一副图像
if (!srcImage.data)
{
printf("读取srcImage错误!\n");
return false;
}
namedWindow(WINDOWS_NAME1,WINDOW_AUTOSIZE);//创建显示窗口
imshow(WINDOWS_NAME1, srcImage);//显示源图像
namedWindow(WINDOWS_NAME2, WINDOW_AUTOSIZE);
createTrackbar("内核大小:", WINDOWS_NAME2, &medianBlurValue, maxMedianBlurValue, on_MedianBlur);//创建轨迹条
on_MedianBlur(medianBlurValue, 0);//触发回调函数
while (int(waitKey()) != 27)//只要不按ESC就一直运行
{
break;
}
destroyAllWindows();
return 0;
}
void on_MedianBlur(int, void*)
{
medianBlur(srcImage, dstImage, medianBlurValue * 2 + 1);//运行中值滤波函数
imshow(WINDOWS_NAME2, dstImage);//显示处理后的函数
}