我正在尝试使用CvConnectedComp,它是cvFloodFill的输出。

CvConnectedComp comp;
cvFloodFill(imgInput,seedPoint,
        cvScalarAll(0),cvScalarAll(.1),cvScalarAll(1.),
        &comp,CV_FLOODFILL_MASK_ONLY,imgMask);

我可以使用comp.rect绘制组件,但是comp.contourNULL。我想将其用于进一步处理。我也尝试了不戴口罩,但仍然是相同的结果。

任何想法将不胜感激。

最佳答案

注意:不推荐使用的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/

10-13 04:59