博客
关于我
Opencv学习笔记之五——线性邻域滤波(方框滤波、均值滤波、高斯滤波)
阅读量:798 次
发布时间:2023-04-15

本文共 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中的常用滤波技术。

    转载地址:http://nrrfk.baihongyu.com/

    你可能感兴趣的文章
    mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
    查看>>
    Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
    查看>>
    MangoDB4.0版本的安装与配置
    查看>>
    Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
    查看>>
    mapping文件目录生成修改
    查看>>
    MapReduce程序依赖的jar包
    查看>>
    mariadb multi-source replication(mariadb多主复制)
    查看>>
    MariaDB的简单使用
    查看>>
    MaterialForm对tab页进行隐藏
    查看>>
    Member var and Static var.
    查看>>
    memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
    查看>>
    memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
    查看>>
    Memcached:Node.js 高性能缓存解决方案
    查看>>
    memcache、redis原理对比
    查看>>
    memset初始化高维数组为-1/0
    查看>>
    Metasploit CGI网关接口渗透测试实战
    查看>>
    Metasploit Web服务器渗透测试实战
    查看>>
    MFC模态对话框和非模态对话框
    查看>>
    Moment.js常见用法总结
    查看>>
    MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
    查看>>