我在填充黑色硬币内的白洞时遇到问题,因此我只能使用填充黑色硬币的 0-255 二进制图像。我使用中值滤波器来完成它,但在这种情况下,硬币之间的连接桥会增长,并且不可能在经过几次侵蚀后才能识别它们......所以我需要一个简单的 opencv 中的类似 floodFill 的方法
这是我的带有孔的图像:
编辑:类似floodfill的功能必须在不提示X,Y坐标作为种子的情况下填充大组件中的孔......
编辑:我尝试使用 cvDrawContours 函数,但我没有在更大的轮廓中填充轮廓。
这是我的代码:
CvMemStorage mem = cvCreateMemStorage(0);
CvSeq contours = new CvSeq();
CvSeq ptr = new CvSeq();
int sizeofCvContour = Loader.sizeof(CvContour.class);
cvThreshold(gray, gray, 150, 255, CV_THRESH_BINARY_INV);
int numOfContours = cvFindContours(gray, mem, contours, sizeofCvContour, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
System.out.println("The num of contours: "+numOfContours); //prints 87, ok
Random rand = new Random();
for (ptr = contours; ptr != null; ptr = ptr.h_next()) {
Color randomColor = new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat());
CvScalar color = CV_RGB( randomColor.getRed(), randomColor.getGreen(), randomColor.getBlue());
cvDrawContours(gray, ptr, color, color, -1, CV_FILLED, 8);
}
CanvasFrame canvas6 = new CanvasFrame("drawContours");
canvas6.showImage(gray);
结果:(你可以看到每个硬币里面的黑洞)