【OpenCV 4开发详解】漫水填充法

本文详细介绍了OpenCV 4中的漫水填充算法,通过选择种子点并判断邻域像素值差异来实现图像分割。利用floodFill函数进行漫水填充,涉及4-邻域和8-邻域的选择,以及填充阈值和掩码矩阵的应用。通过示例程序展示了如何使用floodFill函数对图像进行分割,并给出了填充效果和掩码矩阵。
摘要由CSDN通过智能技术生成
本文首发于 “小白学视觉”微信公众号,欢迎关注公众号
本文作者为小白,版权归 人民邮电出版社发行所有,禁止转载,侵权必究!

经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。

漫水填充算法是根据像素灰度值之间的差值寻找相同区域实现分割。我们可以将图像的灰度值理解成像素点的高度,这样一张图像可以看成崎岖不平的地面或者山区,向地面上某一个低洼的地方倾倒一定量的水,水将会掩盖低于某个高度的区域。漫水填充法利用的就是这样的原理,其形式与注水相似,因此被称形象的称为“漫水”。

与向地面注水一致,漫水填充法也需要在图像选择一个注水像素,该像素被称为种子点,种子点按照一定规则不断向外扩散,从而形成具有相似特征的独立区域,进而实现图像分割。漫水填充分割法主要分为3以下三个步骤:

  • Step1:选择种子点 ( x , y ) (x,y) (x,y)
  • Step2:以种子点为中心,判断4邻域或者8邻域的像素值与种子点像素值的差值,将差值小于阈值的像素点添加进区域内。
  • Step3:将新加入的像素点作为新的种子点,反复执行Step2,直到没有新的像素点被添加进该区域。

OpenCV 4提供了floodFill函数用于实现漫水填充法分割图像,该函数有两种函数原型,代码清单8-16中给出其中一种函数原型。

代码清单8-16 floodFill()函数原型1
1.	int cv::floodFill(InputOutputArray  image,
2.	                      InputOutputArray  mask,
3.	                      Point  seedPoint,
4.	                      Scalar  newVal,
5.	                      Rect *  rect = 0,
6.	                      Scalar  loDiff = Scalar(),
7.	                      Scalar  upDiff = Scalar(),
8.	                      int  flags = 4 
9.	                      )
  • image:输入输出图像,图像数据类型可以为CV_8U或者CV_32F的单通道或者三通道图像。
  • mask:掩码矩阵,尺寸比如输入图像的宽和高各大2的单通道图像,用于标记漫水填充的区域。
  • seedPoint:种子点。
  • newVal:归入种子点区域内像素点的新像素值。
  • rect:种子点漫水填充区域的最小矩形边界,默认值为0,表示不输出边界。
  • loDiff:添加进种子点区域条件的下界差值,当邻域某像素点的像素值与种子点像素值的差值大于该值时,该像素点被添加进种子点所在的区域。
  • upDiff:添加进种子点区域条件的上界差值,当种子点像素值与邻域某像素点的像素值的差值小于该值时,该像素点被添加进种子点所在的区域。
  • flags:漫水填充方法的操作标志,其由三部分构成,分别表示邻域种类、掩码像素值和填充算法的规则,填充算法规则可选择的参数在表8-7给出。
表8-3 inpaint()函数修复图像算法可选择标志
标志参数 简记 含义
FLOODFILL_FIXED_RANGE 1<<16 如果设置该参数,则仅考虑当前像素值与初始种子点像素值之间的差值,否则考虑新种子点像素值与当前像素值之间的差异,即范围是否浮动的标志。
FLOODFILL_MASK_ONLY 1<<17 如果设置,该函数不会更改原始图像,即忽略第四个参数newVal,只生成掩码矩阵。

该函数可以根据给定像素点的像素值,寻找邻域内与其像素值接近的区域。该函数的第一个参数既是输入图像又是输出图像,可以是CV_8U或者CV_32F的单通道或者三通道图像。第二个参数是漫水填充的掩码矩阵,非0像素点表示在原图像中被填充的区域。掩码矩阵的宽和高要比原图像

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学视觉

您的赞赏是我们坚持下去的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值