OpenCV-图像滤波

来源:互联网 发布:双色球七加一中奖算法 编辑:程序博客网 时间:2024/06/04 19:32

OpenCV图像滤波的操作有:

方框滤波

均值块滤波
高斯滤波
中值滤波
双边滤波

本文主要进行一幅图像进行上述滤波操作

具体实现代码:

#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <iostream>  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_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(){// 载入原图g_srcImage = imread("C://Users/long/Pictures/long.jpg", 1);//克隆原图到四个Mat类型中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("【原图窗口】", 1);imshow("【原图窗口】", g_srcImage);//方框滤波//创建窗口namedWindow("【方框滤波】", 1);//创建轨迹条createTrackbar("内核值:", "【方框滤波】", &g_nBoxFilterValue, 50, on_BoxFilter);on_MeanBlur(g_nBoxFilterValue, 0);imshow("【方框滤波】", g_dstImage1);//均值滤波//创建窗口namedWindow("【均值滤波】", 1);//创建轨迹条createTrackbar("内核值:", "【均值滤波】", &g_nMeanBlurValue, 50, on_MeanBlur);on_MeanBlur(g_nMeanBlurValue, 0);//高斯滤波//创建窗口namedWindow("【高斯滤波】", 1);//创建轨迹条createTrackbar("内核值:", "【高斯滤波】", &g_nGaussianBlurValue, 50, on_GaussianBlur);on_GaussianBlur(g_nGaussianBlurValue, 0);//中值滤波//创建窗口namedWindow("【中值滤波】", 1);//创建轨迹条createTrackbar("参数值:", "【中值滤波】", &g_nMedianBlurValue, 50, on_MedianBlur);on_MedianBlur(g_nMedianBlurValue, 0);//双边滤波//创建窗口namedWindow("【双边滤波】", 1);//创建轨迹条createTrackbar("参数值:", "【双边滤波】", &g_nBilateralFilterValue, 50, on_BilateralFilter);on_BilateralFilter(g_nBilateralFilterValue, 0);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("【方框滤波】", g_dstImage1);}//均值滤波操作的回调函数static void on_MeanBlur(int, void *){blur(g_srcImage, g_dstImage2, Size(g_nMeanBlurValue + 1, g_nMeanBlurValue + 1), Point(-1, -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);}

运行结果:



原创粉丝点击