Opencv 中floodfill函数的某个奇怪bug

在使用Opencv的floodfill函数处理带有孔洞的图像时,遇到一个奇怪的bug。当直接填充图像时,结果为整张图全白;而通过先加边再填充的方式,能正确填充孔洞。此问题在C++环境下出现,可能与其他编程语言也有关联。
摘要由CSDN通过智能技术生成

最近在填充图像孔洞的时候,发现了floodfill这个函数有一个奇怪的bug,具体的复现过程如下:

(1)选取一张带有孔洞的物体的图片,最简单的方法就是用画图版画一张,比如下面这幅,实际大小是20x20像素,中间的白色方框是10x10,最里面的黑色孔洞是4x4

(2)读取图片并二值化,这一步没啥问题

Mat src = imread("D:\\aaa\\1.jpg", 0);//黑底白颗粒,黑色孔洞

threshold(src, src, 120,255,0);

(3)用floodfill函数进行漫水填充,此时用下面两种写法,都能得到最中间的黑色孔洞

第一种:给图片加个边,填充后再将边给去掉

Mat thrImg =src;

Mat Temp = Mat(src.rows + 2, src.cols + 2, CV_8UC1, Scalar(0));

thrImg.copyTo(Temp(Range(1, thrImg.rows + 1), Range(1, thrImg.cols + 1)));

Rect ccomp1;

floodFill(Temp, Point(0, 0), Scalar(255));

thrImg = Temp(Rect(1, 1, src.cols, src.rows));

namedWindow("thr

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值