博客
关于我
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/

    你可能感兴趣的文章
    mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
    查看>>
    mysql 数据库备份及ibdata1的瘦身
    查看>>
    MySQL 数据库备份种类以及常用备份工具汇总
    查看>>
    mysql 数据库存储引擎怎么选择?快来看看性能测试吧
    查看>>
    MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
    查看>>
    MySQL 数据库的高可用性分析
    查看>>
    MySQL 数据库设计总结
    查看>>
    Mysql 数据库重置ID排序
    查看>>
    Mysql 数据类型一日期
    查看>>
    MySQL 数据类型和属性
    查看>>
    mysql 敲错命令 想取消怎么办?
    查看>>
    Mysql 整形列的字节与存储范围
    查看>>
    mysql 断电数据损坏,无法启动
    查看>>
    MySQL 日期时间类型的选择
    查看>>
    Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
    查看>>
    MySQL 是如何加锁的?
    查看>>
    MySQL 是怎样运行的 - InnoDB数据页结构
    查看>>
    mysql 更新子表_mysql 在update中实现子查询的方式
    查看>>
    MySQL 有什么优点?
    查看>>
    mysql 权限整理记录
    查看>>