最近在填充图像孔洞的时候,发现了floodfill这个函数有一个奇怪的bug,具体的复现过程如下:
(1)选取一张带有孔洞的物体的图片,最简单的方法就是用画图版画一张,比如下面这幅,实际大小是20x20像素,中间的白色方框是10x10,最里面的黑色孔洞是4x4
![](https://img-blog.csdnimg.cn/img_convert/4e620a923af53d353a20be87a08f1968.jpeg)
(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