图像滤波综合示例

#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);
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值