OpenCV学习之使用createTrackbar函数和线性滤波函数实现手动调节图像的模糊程度

#include <iostream>
#include <opencv2/core/core.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;  // 存储图片的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*);


int main()
{
// 改变控制台console字体颜色
system("color5E");


// 载入原图
g_srcImage = imread("D:\\photo\\dongman.jpg",1); // flag > 0 载入彩色图像
if(!g_srcImage.data){printf("Oh,no,读取srcImage错误!");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);

// 方框滤波
namedWindow("【<1>方框滤波】",1);
// 创建轨迹条
createTrackbar("内核值:","【<1>方框滤波】",&g_nBoxFilterValue,40,on_BoxFilter);
on_BoxFilter(g_nBoxFilterValue,0);



// 均值滤波
namedWindow("【<2>均值滤波】",1);
// 创建轨迹条
createTrackbar("内核值:","【<2>均值滤波】",&g_nMeanBlurValue,40,on_MeanBlur);
on_MeanBlur(g_nMeanBlurValue,0);



// 高斯滤波
namedWindow("【<3>高斯滤波】",1);
// 创建轨迹条
createTrackbar("内核值:","【<3>高斯滤波】",&g_nGaussianBlurValue,40,on_GaussianBlur);
on_GaussianBlur(g_nGaussianBlurValue,0);
imshow("【<3>高斯滤波】",g_dstImage3);


// 输出一些帮助信息,\t:为转义字符,表示横向跳到下一个制表位置
cout << endl << "\t嗯。请调整滚动条观察图像效果~\n\n"
   << "\t按下“q”键时,程序退出~!\n"
<< "\n\n\t\t\t by浅墨";


// 按下“q”键时,程序退出
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);
}

猜你喜欢

转载自blog.csdn.net/xueluowutong/article/details/80939954
今日推荐