您的位置:首页 > 运维架构

opencv学习笔记(十九)——图像滤波综合运用实例

2015-11-16 20:00 399 查看
#include<opencv2/opencv.hpp>

cv::Mat Source_Image,BoxFilter_Image, MeanBlur_Image, GaussianBlur_Image, MedianBlur_Image, BilateralFilter_Image;

int g_BoxFilter;        //方框滤波参数
int g_MeanBlur;         //均值滤波参数
int g_GaussianBlur;     //高斯滤波参数
int g_MedianBlur;       //中值滤波参数
int g_BilateralFilter;  //双边滤波参数

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

void main()
{
Source_Image = cv::imread("medianBlur.jpg");

if (!Source_Image.data) printf("Source loading error!");
cv::namedWindow("Srouce_Image");
cv::imshow("Srouce_Image", Source_Image);

//Boxfilter
g_BoxFilter = 6;
BoxFilter_Image = Source_Image.clone();
cv::namedWindow("BoxFilter_Image");
cv::createTrackbar("内核值:", "BoxFilter_Image", &g_BoxFilter, 40, on_Boxfilter);
on_Boxfilter(g_BoxFilter, 0);
cv::imshow("BoxFilter_Image", BoxFilter_Image);

//MeanBlur
g_MeanBlur = 10;
MeanBlur_Image = Source_Image.clone();
cv::namedWindow("MeanBlur_Image");
cv::createTrackbar("内核值:", "MeanBlur_Image", &g_MeanBlur, 40, on_MeanBlur);
on_MeanBlur(g_MeanBlur, 0);
cv::imshow("MeanBlur_Image", MeanBlur_Image);

//GaussianBlur
g_GaussianBlur = 1;
GaussianBlur_Image = Source_Image.clone();
cv::namedWindow("GaussianBlur_Image");
cv::createTrackbar("内核值:", "GaussianBlur_Image", &g_GaussianBlur, 40, on_GaussianBlur);
on_GaussianBlur(g_GaussianBlur, 0);
cv::imshow("GaussianBlur_Image", GaussianBlur_Image);

//MedianBlur
g_MedianBlur = 1;
MedianBlur_Image = Source_Image.clone();
cv::namedWindow("MedianBlur_Image");
cv::createTrackbar("内核值:", "MedianBlur_Image", &g_MedianBlur, 40, on_MedianBlur);
on_MedianBlur(g_MedianBlur, 0);
cv::imshow("MedianBlur_Image", MedianBlur_Image);

//BilateralFilter
g_BilateralFilter = 1;
BilateralFilter_Image = Source_Image.clone();
cv::namedWindow("BilateralFilter_Image");
cv::createTrackbar("内核值:", "BilateralFilter_Image", &g_BilateralFilter, 40, on_BilateralFilter);
on_BilateralFilter(g_BilateralFilter, 0);
cv::imshow("BilateralFilter_Image", BilateralFilter_Image);

while (char(cv::waitKey(1) != 'q')) {};
}

//方框滤波回调函数
static void on_Boxfilter(int, void *)
{
cv::boxFilter(Source_Image, BoxFilter_Image, -1, cv::Size(g_BoxFilter + 1, g_BoxFilter + 1));
cv::imshow("BoxFilter_Image", BoxFilter_Image);
}

//均值滤波回调函数
static void on_MeanBlur(int, void *)
{
cv::blur(Source_Image, MeanBlur_Image, cv::Size(g_MeanBlur + 1, g_MeanBlur + 1));
cv::imshow("MeanBlur_Image", MeanBlur_Image);
}

//高斯滤波回调函数
static void on_GaussianBlur(int, void*)
{
cv::GaussianBlur(Source_Image, GaussianBlur_Image, cv::Size(g_GaussianBlur*2 + 1, g_GaussianBlur*2 + 1), 0);
cv::imshow("GaussianBlur_Image", GaussianBlur_Image);
}

//中值滤波回调函数
static void on_MedianBlur(int, void *)
{
cv::medianBlur(Source_Image, MedianBlur_Image,g_MedianBlur*2+1);
cv::imshow("MedianBlur_Image", MedianBlur_Image);
}
//双边滤波回调函数
static void on_BilateralFilter(int, void *)
{
cv::bilateralFilter(Source_Image, BilateralFilter_Image, g_BilateralFilter, g_BilateralFilter * 2, g_BilateralFilter / 2);
cv::imshow("BilateralFilter_Image", BilateralFilter_Image);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv