寻找凸缺陷?在OpenCV 2.3, c++和MS Visual Studio2010中

Finding convex defects? in OpenCV 2.3, c++ with MS Visual Studio2010

本文关键字:c++ MS Visual Studio2010 缺陷 OpenCV 寻找      更新时间:2023-10-16

我目前正在尝试使用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,我不知道我怎么能使用旧的语法来获得这些结果。

这是cvConvextDefects上Open CV文档的链接。

我所要求的,要么是一个类似的OpenCV 2.3函数,要么是一个自己编写的代码或算法来发现这些缺陷。或者使用旧的2.1语法来处理向量结果或类似的东西。

(我知道我可以使用其他特征,矩形边界框和拟合圆。但我确信凸缺陷产生了最可区分的特征。

解决方案-我最终使用c++包装器从这篇文章这个包装器唯一不能工作的地方似乎是缺陷向量,这应该是很容易解决的。

下一步是从这些缺陷中获得一些可用的数据。(乍一看。数据似乎是凸壳或等高线上的单点,或者它们的计数。起初我以为是两点的集合,或者是一个点和一个长度的集合,但事实似乎并非如此。如果我在这篇文章中碰到了"砖墙",我就再写一篇

新的c++接口(还)不支持C中的所有函数,反之亦然(并非cpp中的所有函数都是C中的)。原因是多种多样的,但好消息是您可以轻松地使用您想要的任何函数。例如,这里您必须将轮廓转换为序列(CvSeq)并将它们发送到您的函数。

此外,FindContours方法是cvFindContours的包装。你可以把它命名为

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

,然后直接使用结果。

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

我想尝试将我的convexHull向量从c++语法转换为您提到的序列,但我不知道从哪里开始。你能解释一下吗?

在这里看看这个问题,我相信它是深入的。

凹凸性缺陷c++ OpenCv