在 OpenCV 中复制 Matlab 的 bwconvhull

Replicating Matlab's bwconvhull in OpenCV

我目前正在将 Matlab 程序重写为 OpenCV,但找不到与 bwconvhull 函数等效的函数。

Matlab 代码执行以下操作:

H = bwconvhull(W>0.5);

其中W是一个具有浮点值的矩阵(在算法的前一部分中通过几个距离图计算得到)。

我已经成功地找到了一种在 OpenCV 中计算 W 本身的方法 - 结果 cv::Mat 类型为 32FC1.

我第一次尝试直接翻译:

cv::convexHull(w>0.5, h);

此崩溃并出现以下异常:

OpenCV(3.4.1) \opencv\modules\imgproc\src\convhull.cpp:137: 
error: (-215) total >= 0 && (depth == 5 || depth == 4) 
in function cv::convexHull

我查看了源代码,发现问题是 Mat 类型 - (> 运算符产生 8U 垫,而算法似乎只支持 32F32S)。所以我尝试转换:

cv::Mat w2;
w = (w > 0.5);
w.convertTo(w2, CV_32F);
cv::convexHull(w2, h);

但现在问题转移到 total >= 0 条件,其中 totalw.checkVector(2)。我无法理解如何实现此条件。

我也尝试过以下方法,结果相同:

cv::Mat w2 = w * ( w > 0.5 );
cv::convexHull(w2, h);

我的其他尝试涉及 cv::thresholdcv::findContours,但都以类似的方式失败了。

我在 OpenCV 方面确实缺乏经验,如果有任何正确方向的指点,我将不胜感激。

@CrisLuengo 和@AlexanderReynolds 为我指出了正确的方向,非常感谢你们。

我缺少的是 findContours 首先检索图像轮廓的步骤,然后才通过 convexHull 函数 运行 它。我在问问题之前尝试了 findContours 调用,但我一定是选错了参数。为了让它工作,我基本上复制了 sample code here.