2011-11-16 59 views
3

我目前正在尝试使用OpenCV 2.3和C++来检测一只手(戴着绿色手套)并区分不同的手势。寻找凸缺陷?在OpenCV 2.3中,C++与MS Visual Studio2010

在此刻,我的下一步是获取手的特定特征(凸起缺陷)。

到目前为止,我已经在我的过程中使用这些功能:

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语法作为向量结果或类似的方法。

(我知道我可以使用其他功能,矩形边框,并装圈子,但我敢肯定,凸状缺陷产生的最区分功能。)

解决方案 - 我结束了使用C++包装from this post 唯一不适用于此包装的东西似乎是缺陷向量的韭菜,应该很容易解决。

下一步是从这些缺陷中获取一些有用的数据。 (乍看之下,数据看起来似乎是凸形或轮廓上的单点或者这些的数量,我起初预计会有一组两点,或者一个点和一个长度,它似乎不是。如果我用这个打砖墙,我会再发一篇文章)

+1

OpenCV的2.3.1仍然有此方法,以便寻找它时,你一定做错了什么。你可以在文档中看到自己:http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=defects# – Adrian

+0

我已经搜索了很多。我确实认为_vasile_提供的答案将解决我的问题。 (我已经在OpenCV文档的森林中散步了很长一段时间,但感谢提出这个问题) – Sonaten

回答

3

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

此外,FindContours方法是cvFindContours的封装。你可以称它

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

然后直接使用结果。

另一种方法是通过cvConvexDefects()创建一个漂亮的,干净的C++包装并将其提交给OpenCV。在findContours源文件中,你会发现一些帮助(相反的转换)

+0

感谢您的输入,我相信这可以帮助我检测。当我解决问题时,我会添加“回答”。 – Sonaten

+0

到目前为止,我正在努力解决这个问题。我只用很少的时间就可以使用c语法,而且我并不是那种热衷于编程的人。 最初的方法是从我的二进制图像开始寻找c语法的轮廓,但是我似乎缺乏一些相当多的知识,OpenCV.WillowGarage文档网站一直停留在大部分时间。 我想尝试将我的convexHull向量从C++语法转换为您提到的序列,但我不知道从哪里开始。你可能会对此有所了解吗? – Sonaten

+0

我发现_RyanfaeScotland_在他对我的帖子的回答中提到的包装。 – Sonaten

2

我想尝试从C++语法转换我的convexHull向量到您提到的序列,但我不知道在哪里开始。你可能会对此有所了解吗?

看看这个问题在这里,我相信它会进入它。

Convexity defects C++ OpenCv

+0

在函数的_vasile_提示一个C++包装的笔记中,我来找到你指的那个帖子。不过谢谢你的努力。 – Sonaten