我正在尝试使用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
中。关于c - CvConnectedComp.contour在cvFloodFill中为NULL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30775254/