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版权协议,转载请附上原文出处链接和本声明。