我目前正在将一个matlab程序重写为opencv的过程中,我找不到一个等价于
bwconvhull
功能。
matlab代码执行以下操作:
H = bwconvhull(W>0.5);
在哪里?
W
是一个带有浮点值的矩阵(根据算法上一部分中的多个距离图计算得出)。
我已经成功地找到了一种计算方法
W
自身在opencv中-结果
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
mat,而算法似乎只支持
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的经验,我会感激任何指向正确方向的指针。