opencv线性与非线性滤波函数

opencv线性与非线性 滤波函数

#include <iostream>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>

using namespace std;
using namespace cv;

Mat g_srcImage, g_dstImage1, g_dstImage2, g_dstImage3, g_dstImage4, g_dstImage5;
int g_nBoxFilterValue = 6;
int g_nMeanBlurValue = 10;
int g_nGaussianBlurValue = 6;
int g_nMedianBlurValue = 10;
int g_nBilateralFilterValue = 10;

static void on_BoxFileter(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));
	imshow("【<2>均值滤波】", g_dstImage2);
};
static void on_GaussianBlur(int, void*) {
	GaussianBlur(g_srcImage, g_dstImage3, Size(2 * g_nGaussianBlurValue + 1, 2 * g_nGaussianBlurValue + 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_BilateralFilter(int, void*) {
	bilateralFilter(g_srcImage, g_dstImage5, g_nBilateralFilterValue, g_nBilateralFilterValue * 2, g_nBilateralFilterValue / 2);
	imshow("【<5>双边滤波】", g_dstImage5);
};

int main()
{
	system("color5E");
	g_srcImage = imread("1.jpg", 1);
	if (!g_srcImage.data) {
		printf("读取srcImage错误~!\n");
		return false;
	}
	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_BoxFileter);
	on_BoxFileter(g_nBoxFilterValue, 0);
	imshow("【<1>方框滤波】", g_dstImage1);
	//<2>均值滤波
	namedWindow("【<2>均值滤波】", 1);
	createTrackbar("内核值: ", "【<2>均值滤波】", &g_nMeanBlurValue, 40, on_MeanBlur);
	on_MeanBlur(g_nMeanBlurValue, 0);
	imshow("【<2>均值滤波】", g_dstImage2);
	//<3>高斯滤波
	namedWindow("【<3>高斯滤波】", 1);
	createTrackbar("内核值: ", "【<3>高斯滤波】", &g_nGaussianBlurValue, 40, on_GaussianBlur);
	on_GaussianBlur(g_nGaussianBlurValue, 0);
	imshow("【<3>高斯滤波】", g_dstImage3);
	//<4>中值滤波
	namedWindow("【<4>中值滤波】", 1);
	createTrackbar("参数值: ", "【<4>中值滤波】", &g_nMedianBlurValue, 50, on_Medianblur);
	on_Medianblur(g_nMedianBlurValue, 0);
	imshow("【<4>中值滤波】", g_dstImage4);
	//<5>双边滤波
	namedWindow("【<5>双边滤波】", 1);
	createTrackbar("参数值: ", "【<5>双边滤波】", &g_nBilateralFilterValue, 50, on_BilateralFilter);
	on_BilateralFilter(g_nBilateralFilterValue, 0);
	imshow("【<5>双边滤波】", g_dstImage5);

	cout << endl << "\t,请调整滚动条观察图像效果~\n\n"
		<< "\t按下“q”键时,程序退出~!\n";
	while (waitKey(1) != 'q') {}
	return 0;
}

版权声明:本文为m0_60346726原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。