#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <iostream>
using namespace std;
using namespace cv;
Mat g_srcImage,g_dstImage1,g_dstImage2,g_dstImage3,g_dstImage4,g_dstImage5;
//初始化内核的大小为7
int g_nBoxFilterValue = 7;
int g_nMeanBlurValue = 7;
int g_nGaussianBlurValue = 7;
int g_nMedianBlurValue = 7;
int g_nBilateralFilterValue = 7;
//滤波器对应的回调函数
static void on_BoxFilter(int,void *);
static void on_MeanBlur(int,void *);
static void on_GaussianBlur(int,void *);
static void on_MedianBlur(int,void *);
static void on_BilateralFilter(int ,void *);
int main(int argc,char *argv[])
{
if(argc!=2)
{
cout<<"input like this:./test .jpg"<<endl;
return -1;
}
g_srcImage = imread(argv[1]);
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("【原图】");
imshow("【原图】",g_srcImage);
namedWindow("【方框滤波】");
createTrackbar("内核值:","【方框滤波】",&g_nBoxFilterValue,50,on_BoxFilter);
on_BoxFilter(g_nBoxFilterValue,0);
namedWindow("【均值滤波】");
createTrackbar("内核值:","【均值滤波】",&g_nMeanBlurValue,50,on_MeanBlur);
on_MeanBlur(g_nMeanBlurValue,0);
namedWindow("【高斯滤波】");
createTrackbar("内核值:","【高斯滤波】",&g_nGaussianBlurValue,50,on_GaussianBlur);
on_GaussianBlur(g_nGaussianBlurValue,0);
namedWindow("【中值滤波】");
createTrackbar("内核值:","【中值滤波】",&g_nMedianBlurValue,50,on_MedianBlur);
on_MedianBlur(g_nMedianBlurValue,0);
namedWindow("【双边滤波】");
createTrackbar("内核值:","【双边滤波】",&g_nBilateralFilterValue,50,on_BilateralFilter);
on_BilateralFilter(g_nBilateralFilterValue,0);
waitKey(0);
imwrite("boxFilter.jpg",g_dstImage1);
imwrite("meanBlur.jpg",g_dstImage2);
imwrite("gaussianBlur.jpg",g_dstImage3);
imwrite("medianBlur.jpg",g_dstImage4);
imwrite("bilateralFiler.jpg",g_dstImage5);
return 0;
}
static void on_BoxFilter(int,void *)
{
boxFilter(g_srcImage,g_dstImage1,-1,Size(g_nBoxFilterValue+1,g_nBoxFilterValue+1));
imshow("【方框滤波】",g_dstImage1);
}
static void on_MeanBlur(int ,void *)
{
blur(g_srcImage,g_dstImage2,Size(g_nMeanBlurValue+1,g_nMeanBlurValue+1));
imshow("【均值滤波】",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("【高斯滤波】",g_dstImage3);
}
static void on_MedianBlur(int,void *)
{
medianBlur(g_srcImage,g_dstImage4,g_nMedianBlurValue*2+1);
imshow("【中值滤波】",g_dstImage4);
}
static void on_BilateralFilter(int,void *)
{
bilateralFilter(g_srcImage,g_dstImage5,g_nBilateralFilterValue,g_nBilateralFilterValue*2,g_nBilateralFilterValue/2);
imshow("【双边滤波】",g_dstImage5);
}
1、原图 2、方框滤波 3、均值滤波
4、高斯滤波 5、中值滤波 6、双边滤波
在这里效果最好的就是双边滤波了。。。。。
代码抄自:opencv3编程入门 毛星云pdf