CvConnectedComp.contour 为 NULL 与 cvFloodFill

标签 c opencv flood-fill connected-components

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

关于CvConnectedComp.contour 为 NULL 与 cvFloodFill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30775254/

相关文章:

c - OCI 连接字符串...需要帮助

iOS opencv 洪水填充错误

c++ - 原子操作需要硬件支持吗?

c++ - 错误 :Unresolved external Symbol of d2d1effects. h DIRECTX 中的 CLSID_D2D1HueRotation 属性

c++ - OpenCV 使用步幅从数组生成 cv::Mat

opencv - Canny Edge算法与OpenCv-Windows Phone 8

c# - QuickFill/洪水填充算法

c - C 洪水填充程序中的 "Shadow"

c - MPI 收集 2D 子数组

android - 将 Mat 对象从 android java 传递到 native cpp 部分