在OpenCV中复制Matlab的bwconvhull

时间:2018-05-26 22:41:52

标签: c++ matlab opencv convex-hull

我目前正在将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 mat,而算法似乎只支持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真的缺乏经验,并且会对任何指向正确方向感激不尽。

1 个答案:

答案 0 :(得分:0)

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

我缺少的是findContours步骤,首先检索图像的轮廓,然后通过convexHull函数运行它。我在问这个问题之前尝试了findContours电话,但我必须错误地选择了这些参数。为了使它工作,我基本上复制了sample code here