我在填充黑色硬币内部的白洞时遇到了问题,因此我只能使用填充黑色硬币的0-255二进制图像。我已经使用了中值滤镜来实现它,但是在那种情况下硬币之间的连接桥梁的发展和它去是不可能的侵蚀后,多次认出来......所以,我需要一个简单的floodFill类似方法在OpenCV中在二进制物体内填充孔
这是我与孔图像:
编辑:填充函数必须填补孔在没有提示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);
结果:(你可以看到每个硬币里面黑洞)
+1只是因为我喜欢简单的解决方案。 – karlphillip 2012-04-25 15:03:34
在我的情况cvDrawContours不起作用我认为,我已更新的帖子.. – 2012-04-25 16:03:53
好吧,我有一个参数问题,我应该使用:cvDrawContours(灰色,ptr,颜色,0,CV_FILLED,8); 0作为max_level参数。嗯,现在它充满了成功:) – 2012-04-25 16:11:44