寻找凸缺陷?在OpenCV 2.3,c ++与MS Visual Studio 2010中

时间:2011-11-16 10:20:10

标签: c++ opencv convex-hull

我目前正在尝试使用OpenCV 2.3和c ++来检测一只手(戴着绿色手套),并区分不同的手势。

此时此刻,我的下一步是获取手的特定特征(凸起缺陷)。

到目前为止,我已经在我的过程中使用了这些功能:

mixChannels(); //to subtract non-green channels from green. 
threshold(); //to convert to binary
erode(); dialate(); //to get rid of any excess noise
findContours(); //to find contours of course

这些工作非常出色,我可以通过使用findContours()输出drawContours()

下一步,这就是我所使用的convexHull(),它也适用于OpenCV 2.3。然而,我还没有找到convexHull()的矢量结果实际上是什么样的(它们包含哪些特征)。

但这是棘手的部分。

我发现旧版本的OpenCV(使用c使用IplImage),有一个简洁的小函数叫cvConvexityDefects(),它可以给凸包带来一系列缺陷。这些是我需要的,但OpenCV 2.3似乎没有这样的功能,我也看不出如何使用旧语法来获得这些结果。

这是一个link to Open CV documentation on cvConvextDefects

我要求的是,类似的OpenCV 2.3功能,或用于发现这些缺陷的自写代码或算法。或者将旧的2.1语法用于矢量结果或类似的方法。

(我知道我可以使用其他功能,矩形边框和装配圆圈。但我确信凸缺陷会产生最明显的特征。)

解决方案 - 我最终使用来自this post的c ++包装器 唯一不适用于这个包装器的东西似乎是缺陷向量的韭菜,应该很容易解决。

下一步是从这些缺陷中获取一些可用的数据。 (乍一看。数据似乎是在convexHull或Contour上的单点或者这些数据。我起初预计会有一组两个点,或者一个点和一个长度,它似乎不是如果我用这个打“砖墙”,我会另外发帖子)

2 个答案:

答案 0 :(得分:3)

新的C ++接口(尚未)支持C中的所有函数。反过来也是如此(cpp中的所有内容都不在c中)。原因很多,但好消息是你可以轻松使用你想要的任何功能。例如,在这里你必须将轮廓转换为序列(CvSeq)并将它们发送到你的函数。

此外,FindContours方法是cvFindContours的包装器。你可以称之为

cvFindContours((IplImage*)matImage, ...);

然后直接使用结果。

另一种方法是在cvConvexDefects()上创建一个漂亮,干净的C ++包装器并将其提交给OpenCV。在findContours源代码中,您将找到一些帮助(相反的转换)

答案 1 :(得分:2)

  

我想尝试将我的convexHull向量从c ++语法转换为你提到的序列,但我不知道从哪里开始。你能否对此有所了解?

在这里查看这个问题,我相信它会进入它。

Convexity defects C++ OpenCv