Opencv 中floodfill函数的某个奇怪bug

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在填充图像孔洞的时候,发现了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("thrImg", WINDOW_NORMAL);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值