OpenCV学习(28)

图像处理(1):

线性滤波(4):图像线性滤波综合示例

示例程序中可以用滑动条来控制三种线性滤波的核参数值。通过滑动滚动条,就可以控制图像在三种线性滤波下的模糊度,有一定的可玩性。详细注释的代码如下:

#include 
#include
#include"opencv2/highgui/highgui.hpp"
#include
#include 
#include
#include
using namespace std;
using namespace cv;

Mat g_srcImage, g_dstImage1, g_dstImage2, g_dstImage3;
int g_nBoxFilterValue = 3;
int g_nMeanBlurValue = 3;
int g_nGaussianBlurValue = 3;

static void on_BoxFilter(int, void*);
static void on_MeanBlur(int, void*);
static void on_GaussianBlur(int, void*);

int main()
{
	system("color5E");
	cv::utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);//控制台不在输出日志文件

	g_srcImage = imread("E:/pictures/12.png", 1);

	g_dstImage1 = g_srcImage.clone();
	g_dstImage2 = g_srcImage.clone();
	g_dstImage3 = g_srcImage.clone();

	namedWindow("[<0>原图窗口]", 1);
	imshow("[<0>原图窗口]", g_srcImage);

	//方框滤波
	namedWindow("[<1>方框滤波]", 1);
	createTrackbar("内核值:", "[<1>方框滤波]", &g_nBoxFilterValue, 40, on_BoxFilter);

	on_MeanBlur(g_nBoxFilterValue, 0);
	imshow("[<1>方框滤波]", g_dstImage1);

	//均值滤波
	namedWindow("[<2>均值滤波]", 1);

	createTrackbar("内核值:", "[<2>均值滤波]", &g_nMeanBlurValue, 40, on_MeanBlur);
	on_MeanBlur(g_nMeanBlurValue, 0);

	//高斯滤波
	namedWindow("[<3>高斯滤波]", 1);

	createTrackbar("内核值:", "[<2>均值滤波]", &g_nGaussianBlurValue, 40, on_GaussianBlur);
	on_GaussianBlur(g_nGaussianBlurValue, 0);

	cout << endl << "\t,请调整滑动条看图\n\n" << "\t按下q键,程序退出\n";

	while (char(waitKey(1)) != 'q')
	{

	}
	return 0;

}

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

运行结果:
OpenCV学习(28)_第1张图片

 OpenCV学习(28)_第2张图片

 OpenCV学习(28)_第3张图片

 OpenCV学习(28)_第4张图片

 

OpenCV学习(28)_第5张图片

 

你可能感兴趣的:(opencv,计算机视觉,图像处理)