繁体   English   中英

在OpenCV中复制Matlab的bwconvhull

[英]Replicating Matlab's bwconvhull in OpenCV

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

Matlab代码执行以下操作:

H = bwconvhull(W>0.5);

其中W是具有浮点值的矩阵(由算法前一部分中的几个距离图得出)。

我已经成功地找到了一种方法,可以在OpenCV中计算W本身,从而得到类型为32FC1 cv::Mat

我的第一次尝试使用了简单的翻译:

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没有经验,并且会为任何朝着正确方向的指针而感激。

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

我所缺少的是findContours步骤,它首先要检索图像的轮廓,然后才通过convexHull函数运行它。 在询问问题之前,我已经尝试过findContours调用,但是我一定选择了错误的参数。 为了使其正常工作,我基本上在此处复制了示例代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM