Opencv学习笔记之五——线性邻域滤波(方框滤波、均值滤波、高斯滤波)
发布日期:2025-06-18 16:13:25
浏览次数:4
分类:精选文章
本文共 2865 字,大约阅读时间需要 9 分钟。
OpenCV图像滤波技术教程
本篇博文是小武通过学习浅墨_毛星云的博客以及书籍《opencv3.0编程入门》整理的笔记及疑问心得,小武水平有限,欢迎交流。
方框滤波
方框滤波(box filter)被封装在一个名为boxblur的函数中,即boxblur函数的作用是使用方框滤波器(box filter)来模糊一张图片,从src输入,从dst输出。
函数原型
void boxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), bool normalize=true, int borderType=BORDER_DEFAULT )
参数详解
InputArray src:输入图像,填Mat类的对象即可。OutputArray dst:目标图像,需要和源图片有一样的尺寸和类型。int ddepth:输出图像的深度,-1代表使用原图深度,即src.depth()。Size ksize:内核的大小。一般这样写Size( w,h )来表示内核的大小( 其中,w 为像素宽度, h为像素高度)。Size(3,3)就表示3x3的核大小,Size(5,5)就表示5x5的核大小。Point anchor:表示锚点(即被平滑的那个点),默认值Point(-1,-1)表示这个锚点在核的中心。bool normalize:标识符,表示内核是否被其区域归一化。int borderType:用于推断图像外部像素的某种边界模式,默认值BORDER_DEFAULT。内核
方框滤波使用的是一个均匀大小的矩形内核。以下是示例内核图:
1 1 11 1 11 1 1
均值滤波
均值滤波是方框滤波归一化(normalized)后的特殊情况。均值滤波的作用是对图像进行均值模糊,使图像更加平滑。
函数原型
void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT )
参数详解
InputArray src:输入图像,填Mat类的对象即可。OutputArray dst:目标图像,需要和源图片有一样的尺寸和类型。Size ksize:内核的大小。Size(3,3)表示3x3的核大小,Size(5,5)表示5x5的核大小。Point anchor:锚点,默认值Point(-1,-1)表示锚点在核的中心。int borderType:边界模式,默认值BORDER_DEFAULT。内核
均值滤波使用的是均匀大小的矩形内核,但由于归一化处理,内核的权重为1。以下是示例内核图:
1 1 11 1 11 1 1
高斯滤波
高斯滤波(GaussianBlur)函数的作用是用高斯滤波器来模糊一张图片。高斯滤波比方框滤波和均值滤波更加平滑,效果更自然。
函数原型
void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT )
参数详解
InputArray src:输入图像,填Mat类的对象即可。OutputArray dst:目标图像,需要和源图片有一样的尺寸和类型。Size ksize:高斯内核的大小。ksize.width和ksize.height可以不同,但它们都必须为正数和奇数,或者由sigma计算得出。double sigmaX:高斯核函数在X方向的标准偏差。double sigmaY:高斯核函数在Y方向的标准偏差。若sigmaY为零,则设为sigmaX。int borderType:边界模式,默认值BORDER_DEFAULT。内核
高斯滤波使用的是高斯函数设计的内核。以下是示例内核图:
5.0 2.0 0.0 0.0 5.0 2.0 4.0 2.0 2.0 2.0 0.0 2.0 4.0 2.0 0.0 0.0 2.0 2.0 4.0 2.0 5.0 2.0 0.0 0.0 5.0
代码实现
方框滤波
#include#include #include using namespace std; using namespace cv;int main() { Mat lenna1 = imread("lenna.jpg"); Mat Img_out; boxFilter(lenna1, Img_out, -1, Size(9, 9)); imshow("【原图】方框滤波", lenna1); imshow("【效果图】方框滤波", Img_out); waitKey(0); return 0;}
均值滤波
#include#include #include #include using namespace std; using namespace cv;int main() { Mat lenna1 = imread("lenna.jpg"); Mat Img_out; blur(lenna1, Img_out, Size(7, 7)); imshow("【原图】均值滤波", lenna1); imshow("【效果图】均值滤波", Img_out); waitKey(0); return 0;}
高斯滤波
#include#include #include #include using namespace std; using namespace cv;int main() { Mat lenna1 = imread("lenna.jpg"); Mat Img_out; GaussianBlur(lenna1, Img_out, Size(9, 9), 0, 0); imshow("【原图】高斯滤波", lenna1); imshow("【效果图】高斯滤波", Img_out); waitKey(0); return 0;}
通过上述教程,可以轻松学习OpenCV中的常用滤波技术。
发表评论
最新留言
感谢大佬
[***.8.128.20]2026年05月27日 19时06分51秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PIPE 接口信号列表
2023-03-02
pipeline配置与管理Job企业级实战
2023-03-02
pipeline项目配置实战
2023-03-02
Pipenv 与 Conda?
2023-03-02
QVGA/HVGA/WVGA/FWVGA分辨率屏含义及大小//Android虚拟机分辨率
2023-03-02
pipy国内镜像的网址
2023-03-02
quiver绘制python语言
2023-03-02
pip下载缓慢
2023-03-02
PIP使用SSH从BitBucket安装自定义软件包,无需输入SSH密码
2023-03-02
pip在安装模块时提示Read timed out
2023-03-02
pip更换源
2023-03-02
SpringBoot之Banner源码深度分解
2023-03-02
Pix2Pix如何工作?
2023-03-02
QuickBI助你成为分析师——搞定数据源
2023-03-02
pkl来存储python字典
2023-03-02
quick sort | 快速排序 C++ 实现
2023-03-02
pkpmbs 建设工程质量监督系统 文件上传漏洞复现
2023-03-02