#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
//************************************
// 图像滤波综合示例
//************************************
Mat g_srcImage, g_dstImage1, g_dstImage2, g_dstImage3, g_dstImage4, g_dstImage5;
int g_nBoxFilterValue = 3;//方框滤波参数值
int g_nMeanBlurValue = 3;//均值滤波参数值
int g_nGaussianBlurValue = 3;//高斯滤波参数值
int g_nMedianBlurValue = 10;//中值滤波
int g_nBilateraFilterValue = 10;//双边滤波
static void on_BoxFilter(int, void *);//方框滤波
static void on_MeanBlur(int, void *);//均值滤波
static void on_GaussianBlur(int, void*);//高斯滤波
static void on_MedianBlur(int, void *);//中值滤波
static void on_BilateraFilter(int, void *);//双边滤波
int main()
{
system("color 5E");
g_srcImage = imread("C:/Users/hasee-pc/Desktop/girl.jpg");
if (!g_srcImage.data)
{
printf("error in srcImage!\n");
return -1;
}
g_dstImage1 = g_srcImage.clone();
g_dstImage2 = g_srcImage.clone();
g_dstImage3 = g_srcImage.clone();
g_dstImage4 = g_srcImage.clone();
g_dstImage5 = g_srcImage.clone();
namedWindow("【<0>原图窗口】", 1);
imshow("【<0>原图窗口】", g_srcImage);
//<----------------【1】方框滤波----------------->
namedWindow("【<1>方框滤波】", 1);
createTrackbar("内核值:", "【<1>方框滤波】", &g_nBoxFilterValue, 40, on_BoxFilter);
on_BoxFilter(g_nBoxFilterValue, 0);
//<----------------【2】均值滤波---------------->
namedWindow("【<2>均值滤波】", 1);
createTrackbar("内核值:", "【<2>均值滤波】", &g_nMeanBlurValue, 40, on_MeanBlur);
on_MeanBlur(g_nMeanBlurValue, 0);
//<----------------【3】高斯滤波---------------->
namedWindow("【<3>高斯滤波】", 1);
createTrackbar("内核值:", "【<3>高斯滤波】", &g_nGaussianBlurValue, 40, on_GaussianBlur);
on_GaussianBlur(g_nGaussianBlurValue, 0);
//<----------------【4】中值滤波--------------->
namedWindow("【<4>中值滤波】", 1);
createTrackbar("参数值:", "【<4>中值滤波】", &g_nMedianBlurValue, 50, on_MedianBlur);
on_MedianBlur(g_nMedianBlurValue, 0);
//<----------------【5】双边滤波--------------->
namedWindow("【<5>双边滤波】", 1);
createTrackbar("参数值:", "【<5>双边滤波】", &g_nBilateraFilterValue, 50, on_BilateraFilter);
on_BilateraFilter(g_nBilateraFilterValue, 0);
cout << "\t,调整滚动条观察图像效果\n\n"
<< "\t按'q'退出\n";
while (char(waitKey(1)) != 'q') {}
waitKey(0);
// std::cout << "Hello World!\n";
}
static void on_BoxFilter(int, void *)
{
//方框滤波
boxFilter(g_srcImage, g_dstImage1, -1, Size(g_nBoxFilterValue + 1, g_nBoxFilterValue + 1));
imshow("【<1>方框滤波】", g_dstImage1);
}
static void on_MeanBlur(int, void *)
{
//均值滤波
blur(g_srcImage, g_dstImage2, Size(g_nMeanBlurValue + 1, g_nMeanBlurValue + 1), Point(-1, -1));
imshow("【<2>均值滤波】", g_dstImage2);
}
static void on_GaussianBlur(int, void *)
{
//高斯滤波
GaussianBlur(g_srcImage, g_dstImage3, Size(g_nGaussianBlurValue * 2 + 1, g_nGaussianBlurValue * 2 + 1), 0, 0);
imshow("【<3>高斯滤波】", g_dstImage3);
}
static void on_MedianBlur(int, void *)
{
//中值滤波
medianBlur(g_srcImage,
g_dstImage4,
g_nMedianBlurValue*2+1
);
imshow("【<4>中值滤波】", g_dstImage4);
}
static void on_BilateraFilter(int, void *)
{
//双边滤波
bilateralFilter(g_srcImage, g_dstImage5, g_nBilateraFilterValue, g_nBilateraFilterValue * 2 , g_nBilateraFilterValue / 2);
imshow("【<5>双边滤波】", g_dstImage5);
}