我目前正在尝试使用 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()
.
下一步,这就是我所在的地方,是 using convexHull()
,它也适用于 OpenCV 2.3。然而,我还没有弄清楚矢量结果的convexHull()
实际外观(它们包含哪些特征)。
但这就是棘手的部分。
我发现旧版本的 OpenCV(使用 c which uses IplImage
)有一个简洁的小函数cvConvexityDefects()
,可以在凸包上给出一组缺陷。这些是我需要的,但 OpenCV 2.3 似乎没有这样的功能,我不知道如何使用旧语法来获得这些结果。
这是.Open CV 文档的链接cvConvextDefects
。
我要求的是类似的 OpenCV 2.3 函数,或者是用于查找这些缺陷的自写代码或算法。或者一种将旧的 2.1 语法用于矢量结果或类似的方法。
(我知道我可以使用其他特征,矩形边界框和拟合圆。但我确信凸缺陷会产生最可区分的特征。)
解决方案 - 我最终使用了这篇文章中的 c++ 包装器。这个包装器 唯一不起作用的似乎是缺陷向量的韭菜,它应该很容易解决。
下一步是从这些缺陷中获取一些可用数据。(乍一看。数据似乎是convexHull或Contour上的单点或这些的计数。我起初期望一组两个点,或一个点和一个长度,但它似乎不是.如果我用这个打“砖墙”,我会再发一篇文章)