2011-10-05 59 views
0

我完全新的OpenCV找到OpenCV的最接近的塊,而且最近我分配一個任務來查找Kinect的檢測最接近的斑點,這意味着如果你伸出你的雙手中心在kinect前面,然後你的雙手成爲與你身體相比最接近的斑點。需要使用建議的kinect

我給出一個示例代碼,這也可以在here網上找到。到目前爲止,我只能想到兩種方法,一種是使用cvFindContours()獲取對象的所有輪廓,並通過每個循環來找到最接近的一個。問題是我不知道該怎麼做,因爲我不知道是否有函數可以用來獲取每個輪廓的深度信息。

我的第二個想法是剛剛循環雖然depthMat矩陣,並找到最低值,這被認爲是最接近的點,並傳播出去找塊,並繪製塊。這個問題是,它需要很多的計算,我的kinect視頻響應非常緩慢。

有沒有人有這個任務的好建議嗎?謝謝。

回答

0

你可以嘗試迭代範圍門。 Kinect的最大有效範圍約爲6米,因此對於有限的距離,這可能會起作用。

假設深度在釐米(如果它在計數,計數劃分成說10,100或1000計數任何看來是合適的容器)。

Mat depthData, objectMask; 
Mat closestDepth, closestObjectMask, closestDist; 

// getting depth data from kinect out here... 

for(int i = 600; i > 0; i -= 20) 
{ 
    threshold(depthData, objectMask, (double)i, 1, THRESH_BINARY_INV); 
    // gated out all objects (may need to adjust pixel count for best results) 
    Scalar pixelCount = sum(objectMask); 
    if(pixelCount.val[0] < 1.0) 
    { 
     break; 
    } 

    closestDepth = depthData; // last good depth data 
    closestObjectMask = objectMask; // last good object mask 
    closestDist = i; // last closest distance 
} 

一旦循環爆發,你應該具備以下條件:

  • closestDepth - 應該是深度圖像使用由與面罩相乘得到實際的對象的距離。
  • closestDist - 應在距離門的距離「黑掉」
  • closestObjectMask前 - 應該是最接近的對象(最大輪廓或類似的東西進行跟蹤)的面具

希望這是有幫助!