opencv图像线性滤波综合示例(方框,均值,高斯)

#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
 
//全局变量声明部分
Mat g_srcImage, g_dstImage1, g_dstImage2, g_dstImage3;//存储图片的Mat类型
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 *);
 
//main()函数
int main() {
    
    
	//改变console字体颜色
	system("color5E");
 
	//载入原图
	g_srcImage = imread("1.jpg", 1);//载入三通道彩色图像
	if (!g_srcImage.data) {
    
    
		printf("读取srcImage错误!\n");
		return false;
	}
 
	//复制原图到三个Mat类型中
	g_dstImage1 = g_srcImage.clone();//初始化目标图像大小,类型
	g_dstImage2 = g_srcImage.clone();
	g_dstImage3 = 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);
	//=========================================================
	
	//输出一些帮助信息
	cout << endl << "\t,请调整轨迹条观察图像效果!\n\n" << "\t按下‘Q’键,程序退出!\n";
	//按下Q键程序退出
	while(char(waitKey(1))!='q'){
    
    }
 
	return 0;
}
 
//=======================【on_BoxFilter()函数】==============================
static void on_BoxFilter(int, void *) {
    
    //回调函数参数格式
	//方框滤波操作
	boxFilter(g_srcImage, g_dstImage1, -1, Size(g_nBoxFilterValue + 1, g_nBoxFilterValue + 1));//ddepth=1,dst为原图深
	//显示窗口
	imshow("<1>方框滤波", g_dstImage1);
}
 
//=======================【on_MeanBlur()函数】===============================
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);
}
 
//=======================【on_GaussianBlur()函数】===========================
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);
}

详细过程

猜你喜欢

转载自blog.csdn.net/qq_43570528/article/details/100636348