我正在尝试使用 CvConnectedComp
,它是 cvFloodFill
的输出。
CvConnectedComp comp;
cvFloodFill(imgInput,seedPoint,
cvScalarAll(0),cvScalarAll(.1),cvScalarAll(1.),
&comp,CV_FLOODFILL_MASK_ONLY,imgMask);
我可以使用 comp.rect
来绘制组件,但是 comp.contour
是 NULL
。我想将它用于进一步处理。我也试过不戴面具,但结果还是一样。
任何想法将不胜感激。
最佳答案
注意:已弃用的 OpenCV C API 应仅用于支持遗留代码。新代码应使用 C++ API。
查看 OpenCV 3.0.0 的代码,cvFloodFill
不会填充 comp.contour
;它设置的唯一成员是 .rect
、.area
和 .value
。我不知道它是否总是这样,但这是正在发生的事情:
首先,查看 C++ cv::floodFill
的签名:
int floodFill(InputOutputArray image, InputOutputArray mask, Point seedPoint,
Scalar newVal, Rect* rect=0, Scalar loDiff=Scalar(),
Scalar upDiff=Scalar(), int flags=4 )
注意这里没有连通分量结构,只有一个Rect
。返回值是被淹没的区域的面积。
这是由cvFloodFill
调用的方法。代码将 &comp->rect
传递给填充它的 C++ 方法,使用 comp->area
的返回值并将 newVal
复制到comp->value
.
关于CvConnectedComp.contour 为 NULL 与 cvFloodFill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30775254/