2011-11-16 54 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