发现凸缺陷?在 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中找到凸性缺陷? [根据给定的输入图像崩溃..]