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

Posted

技术标签:

【中文标题】发现凸缺陷?在 OpenCV 2.3 中,c++ 与 MS Visual Studio 2010【英文标题】:Finding convex defects? in OpenCV 2.3, c++ with MS Visual Studio2010 【发布时间】: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 文档的森林里走来走去很长一段时间了,但感谢您提出这个问题) 【参考方案1】:

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

此外,FindContours 方法是对 cvFindContours 的包装。你可以叫它

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

然后直接使用结果。

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

【讨论】:

感谢您的输入,我相信这可以帮助我进行检测。我会在解决问题时添加“已回答”。 到目前为止,我一直在努力解决这个问题。我只用过几次 c 语法,而且我一开始就不是那么热衷于编程。最初的方法是从我的二进制图像开始使用 c 语法查找轮廓,但是我似乎缺乏一些知识,而且 OpenCV.WillowGarage 文档站点大部分时间都处于关闭状态。我想尝试将我的 convexHull 向量从 c++ 语法转换为您提到的序列,但我不知道从哪里开始。您能否对此有所了解? 我找到了 RyanfaeScotland 在他对我的帖子的回答中提到的包装。【参考方案2】:

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

在这里查看这个问题,我相信它会涉及到它。

Convexity defects C++ OpenCv

【讨论】:

关于 vasile 建议为函数使用 c++ 包装器的注释,我来找到您所指的帖子。但是感谢您的努力。

以上是关于发现凸缺陷?在 OpenCV 2.3 中,c++ 与 MS Visual Studio 2010的主要内容,如果未能解决你的问题,请参考以下文章

在opencv中找到凸性缺陷? [根据给定的输入图像崩溃..]

使用 OpenCV 凸包和凸缺陷函数的手指跟踪/计数

opencv使用convexityDefects计算轮廓凸缺陷

android java opencv 2.4 凸壳凸缺陷

opencv 9 -- 轮廓 其他操作

opencv 9 -- 轮廓 其他操作