我正在尝试使用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
中。