OpenCV - 三种线性滤波的使用
2015-11-16 12:50
344 查看
一、方框滤波
方框滤波(box Filter)被封装在一个名为boxblur的函数中,即boxblur函数的作用是使用方框滤波器(box filter)来模糊一张图片。函数原型为:
参数详解:
第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可
第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。
第三个参数,int类型的ddepth,输出图像的深度,-1代表使用原图深度,即src.depth()。
第四个参数,Size类型的ksize,内核的大小(Size(w,h),w 为像素宽度, h为像素高度)
第五个参数,Point类型的anchor,表示锚点(即被平滑的那个点),注意他有默认值Point(-1,-1)
第六个参数,bool类型的normalize,默认值为true,表示内核是否被其区域归一化(normalized)了
第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT
二、均值滤波
均值滤波,是最简单的一种滤波操作,输出图像的每一个像素是核窗口内输入图像对应像素的像素的平均值( 所有像素加权系数相等),其实说白了它就是归一化后的方框滤波。函数原型为:(参数含义与方框滤波相同)
三、高斯滤波
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。函数原型为:(除第四五个参数不同之外其余与方框滤波相同,因此只详细说明第四五个参数)
参数详解:
第四个参数,double类型的sigmaX,表示高斯核函数在X方向的的标准偏差。
第五个参数,double类型的sigmaY,表示高斯核函数在Y方向的的标准偏差。若sigmaY为零,就将它设为sigmaX,如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来。
运行调用三种线性滤波函数的代码以及运行后效果图如下:
方框滤波(box Filter)被封装在一个名为boxblur的函数中,即boxblur函数的作用是使用方框滤波器(box filter)来模糊一张图片。函数原型为:
void boxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor = Point(-1, -1), boolnormalize = true, int borderType = BORDER_DEFAULT)
参数详解:
第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可
第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。
第三个参数,int类型的ddepth,输出图像的深度,-1代表使用原图深度,即src.depth()。
第四个参数,Size类型的ksize,内核的大小(Size(w,h),w 为像素宽度, h为像素高度)
第五个参数,Point类型的anchor,表示锚点(即被平滑的那个点),注意他有默认值Point(-1,-1)
第六个参数,bool类型的normalize,默认值为true,表示内核是否被其区域归一化(normalized)了
第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT
二、均值滤波
均值滤波,是最简单的一种滤波操作,输出图像的每一个像素是核窗口内输入图像对应像素的像素的平均值( 所有像素加权系数相等),其实说白了它就是归一化后的方框滤波。函数原型为:(参数含义与方框滤波相同)
void blur(InputArray src, OutputArraydst, Size ksize, Point anchor = Point(-1,-1), int borderType = BORDER_DEFAULT)
三、高斯滤波
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。函数原型为:(除第四五个参数不同之外其余与方框滤波相同,因此只详细说明第四五个参数)
void GaussianBlur(InputArray src,OutputArray dst, Size ksize, double sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT)
参数详解:
第四个参数,double类型的sigmaX,表示高斯核函数在X方向的的标准偏差。
第五个参数,double类型的sigmaY,表示高斯核函数在Y方向的的标准偏差。若sigmaY为零,就将它设为sigmaX,如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来。
运行调用三种线性滤波函数的代码以及运行后效果图如下:
#include <iostream> #include <vector> #include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace cv; using namespace std; #define WinDow_0 "【原图】" #define WinDow_1 "方框滤波" #define WinDow_2 "均值滤波" #define WinDow_3 "高斯滤波" int main() { Mat img = imread("D:\\PhotoMem\\3.jpg"); if (!img.data) { printf("图片读入路径有误!"); return -1; } imshow(WinDow_0, img); Mat src_boxblur, src_blur, src_gaussianblur; /* 参数img为输入的图像参数 参数src_boxblur, src_blur, src_gaussianblur分别为不同滤波输出的图像参数 参数Size(x,y)为内核大小 */ //方框滤波// boxFilter(img, src_boxblur, -1, Size(5, 5));//-1为输出图像的深度(-1表示与原图像相同) imshow(WinDow_1, src_boxblur); //均值滤波// blur(img, src_blur, Size(5, 5)); imshow(WinDow_2, src_blur); //高斯滤波// GaussianBlur(img, src_gaussianblur, Size(5, 5), 0, 0);//第4,5个参数的0,0分别表示高斯核函数在X,Y方向的标准偏差 imshow(WinDow_3, src_gaussianblur); waitKey(0); }运行效果比对图:
相关文章推荐
- 域名直接访问到项目
- centos下的日志
- Linux系统中普通文件和目录文件的区别
- 探讨opencv中mask的应用
- maven 打包时动态替换properties资源文件中的配置值
- centos下安装jdk/tomcat/mysql
- NSOperation
- linux 下java环境搭建
- nginx+fastcgi+php安全虚拟主机隔离配制方法
- tomcat 内存溢出错误记录
- 修改Linux时间一般涉及到3个命令: date, clock, hwclock
- DRBD+Heartbeat+MySQL高可用
- hadoop环境配置过程中可能遇到问题的解决方案
- iOS应用架构谈
- IIS7.5 在已有的WEB网站上配置FTP发布
- Linux Shell 1>/dev/null 2>&1 含义
- Openlayers加载腾讯、高德、天地图
- C#获取网页的HTML码、下载网站图片
- 使用John the ripper工具来尝试破解Linux密码
- 移植 nginx