在 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
垫,而算法似乎只支持 32F
和 32S
)。所以我尝试转换:
cv::Mat w2;
w = (w > 0.5);
w.convertTo(w2, CV_32F);
cv::convexHull(w2, h);
但现在问题转移到 total >= 0
条件,其中 total
是 w.checkVector(2)
。我无法理解如何实现此条件。
我也尝试过以下方法,结果相同:
cv::Mat w2 = w * ( w > 0.5 );
cv::convexHull(w2, h);
我的其他尝试涉及 cv::threshold
和 cv::findContours
,但都以类似的方式失败了。
我在 OpenCV 方面确实缺乏经验,如果有任何正确方向的指点,我将不胜感激。
@CrisLuengo 和@AlexanderReynolds 为我指出了正确的方向,非常感谢你们。
我缺少的是 findContours
首先检索图像轮廓的步骤,然后才通过 convexHull
函数 运行 它。我在问问题之前尝试了 findContours
调用,但我一定是选错了参数。为了让它工作,我基本上复制了 sample code here.
我目前正在将 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
垫,而算法似乎只支持 32F
和 32S
)。所以我尝试转换:
cv::Mat w2;
w = (w > 0.5);
w.convertTo(w2, CV_32F);
cv::convexHull(w2, h);
但现在问题转移到 total >= 0
条件,其中 total
是 w.checkVector(2)
。我无法理解如何实现此条件。
我也尝试过以下方法,结果相同:
cv::Mat w2 = w * ( w > 0.5 );
cv::convexHull(w2, h);
我的其他尝试涉及 cv::threshold
和 cv::findContours
,但都以类似的方式失败了。
我在 OpenCV 方面确实缺乏经验,如果有任何正确方向的指点,我将不胜感激。
@CrisLuengo 和@AlexanderReynolds 为我指出了正确的方向,非常感谢你们。
我缺少的是 findContours
首先检索图像轮廓的步骤,然后才通过 convexHull
函数 运行 它。我在问问题之前尝试了 findContours
调用,但我一定是选错了参数。为了让它工作,我基本上复制了 sample code here.