Opencv学习之线性滤波
2017-06-15 16:00
211 查看
平滑处理也称模糊处理,常用作减少图像上的噪点,失真以及降低图像分辨率。 图像滤波是指尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,消除图像中的噪声成分叫做图像的平滑化或滤波操作。 平滑滤波是低频增强的空间域滤波技术,目的:模糊和去噪。
方框滤波–boxFilter函数
void boxFilter(InputArray, OutputArray, int ddepth,Size ksize,Point anchor=Point(-1,-1),boolnormalize=true,int borderType=BORDER_DEFAULT) *第一个参数,输入图像,图片深度应为:CV_8U、16U、16S、32F、64F之一。 *第二个参数,输出图像。 *第三个参数,输出图像深度,-1代表使用原图像深度。 *第四个参数,滤波器大小,Size(w,h),w代表图像宽度,h代表图像高度。 *第五个参数,表示被平滑的点(锚点),默认点Point(-1,-1)代表滤波器中心。 *第六个参数,表示滤波器是否被其区域归一化了。当为true时,方框滤波器就变成了均值滤波器,当为false时,用于计算每个像素邻域内的积分特性,如密集光流算法中用到的图像倒数的协方差矩阵。 *第七个参数,用于推断图像外部像素的某种边界模式,一般不用管。
均值滤波–blur函数
void blur(InputArray,OutputArray,Size ksize,Point anchor=Point(-1,-1),int borderType=BORDER_DEFAULT) *第一个参数,输入图像,图片深度应为:CV_8U、16U、16S、32F、64F之一。 *第二个参数,输出图像。 *第三个参数,滤波器大小,Size(w,h),w代表图像宽度,h代表图像高度。 *第四个参数,表示被平滑的点(锚点),默认点Point(-1,-1)代表滤波器中心。 *第五个参数,用于推断图像外部像素的某种边界模式,一般不用管。
高斯滤波–GaussianBlur函数
其视觉效果就像是经过一个半透明屏幕在观察图像,用于计算机视觉算法中的预处理阶段,以增强图像在不同比例大小下的图像效果(参见尺度空间表示以及尺度空间实现)。 void GaussianBlur(InputArray,OutputArray,Size ksize,double sigmaX,double sigmaY=0,intborderType=BORDER_DEFAULT) *第一个参数,输入图像,图片深度应为:CV_8U、16U、16S、32F、64F之一。 *第二个参数,输出图像。 *第三个参数,高斯滤波器的大小,宽和高可以不同,但是都必须是正数和奇数,或者零。 *第四个参数,高斯滤波器在X方向的标准偏差。 *第五个参数,高斯滤波器在Y方向的标准偏差。若sigmaY为零,就将它设为sigmaX,如果sigmaX和sigmaY都是0,那么就由滤波器的宽和高计算出来。 *第六个参数,用于推断图像外部像素的某种边界模式,一般不用管。
#include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<iostream> using namespace cv; using namespace std; //全局变量声明*********************************************** //存储图片的输入输出图片Mat类型 Mat g_srcImage,g_dstImage1,g_dstImage2,g_dstImage3; //方框,均值,高斯滤波参数值 int g_nBoxFilterValue=2; int g_nMeanFilterValue=2; int g_nGaussianFilterValue=2; //全局函数声明*********************************************** //轨迹回调函数,方框,均值,高斯滤波 static void on_BoxFilter(int,void *); static void on_MeanFilter(int,void *); static void on_GaussianFilter(int,void *); //主函数 int main() { system("color5E"); //载入原图 g_srcImage=imread("/Users/new/Desktop/1.jpg",1); if(!g_srcImage.data){printf("读取源图错误~!\n");return false;} //复制原图到三个Mat类型中 g_dstImage1=g_srcImage.clone(); g_dstImage2=g_srcImage.clone(); g_dstImage3=g_srcImage.clone(); //显示原图 namedWindow("image[origin]",1); imshow("image[origin]",g_srcImage); //方框滤波 namedWindow("image[BoxFilter]",1); createTrackbar("Filter Size ", "image[BoxFilter]", &g_nBoxFilterValue,30,on_BoxFilter); on_BoxFilter(g_nBoxFilterValue, 0); //均值滤波 namedWindow("image[MeanFilter]",1); createTrackbar("Filter Size ", "image[MeanFilter]", &g_nMeanFilterValue, 30,on_MeanFilter); on_MeanFilter(g_nMeanFilterValue, 0); //高斯滤波 namedWindow("image[GaussianFilter]",1); createTrackbar("Filter Size ", "image[GaussianFilter]", &g_nGaussianFilterValue, 30,on_GaussianFilter); on_GaussianFilter(g_nGaussianFilterValue, 0); waitKey(); return 0; } //方框滤波操作的回调函数 static void on_BoxFilter(int,void *) { boxFilter(g_srcImage,g_dstImage1,-1,Size(g_nBoxFilterValue+1,g_nBoxFilterValue+1)); imshow("image[BoxFilter]",g_dstImage1); } //均值滤波操作的回调函数 static void on_MeanFilter(int,void *) { blur(g_srcImage,g_dstImage2,Size(g_nMeanFilterValue+1,g_nMeanFilterValue+1),Point(-1,-1)); imshow("image[MeanFilter]",g_dstImage2); } //高斯滤波操作的回调函数 static void on_GaussianFilter(int,void *) { GaussianBlur(g_srcImage,g_dstImage3,Size(g_nGaussianFilterValue*2+1,g_nGaussianFilterValue*2+1),0,0); imshow("image[GaussianFilter]",g_dstImage3); }
原始图片:
方框滤波:
均值滤波:
高斯滤波:
opencv技巧
(1)A.getMat():复制源图的形参Mat数据。Mat类内有.depth(),.channels(),.creat()等。(2)createTrackbar():创建轨迹条,最小位置为0!。
相关文章推荐
- Opencv 学习笔记之图像线性滤波综合示例
- OpenCV学习十五:线性滤波filter2D
- OpenCV学习笔记(九):线性滤波:方框滤波、均值滤波、高斯滤波
- 学习【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波---思维导图笔记
- opencv学习-kalman 滤波 演示与opencv代码
- Opencv2系列学习笔记8(图像滤波)
- Opencv学习一:高斯滤波
- [学习opencv]高斯、中值、均值、双边滤波
- 我的OpenCV学习笔记(17):利用形态学学滤波检测边沿和角点
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- opencv学习-imgprocess-滤波
- 我的OpenCV学习笔记(10):空域滤波之锐化滤波器
- opencv学习1 还有附带的kalman滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- OpenCV2马拉松第5圈——线性滤波
- 【学习opencv】IplImage平滑滤波 cvSmooth
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
- 我的OpenCV学习笔记(九):空域滤波之中值滤波
- 学习OpenCV——Kalman滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波