【发布时间】:2011-12-30 07:18:20
【问题描述】:
我目前正在尝试使用 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
这些工作非常出色,我已经能够通过使用drawContours() 输出findContours()。
下一步,这就是我所在的位置,使用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上的单点或这些的计数。我起初期望一组两个点,或一个点和一个长度,但它似乎不是. 如果我用这个打“砖墙”,我会再发一篇)
【问题讨论】:
-
OpenCV 2.3.1 仍然有这个方法,所以你在寻找它的时候一定是做错了什么。您可以在文档中自己查看:opencv.itseez.com/modules/imgproc/doc/…
-
我已经搜索了很多。我确实认为 vasile 提供的答案将解决我的问题。 (我已经在 OpenCV 文档的森林里走来走去很长一段时间了,但感谢您提出这个问题)
标签: c++ opencv convex-hull