2011-10-05 55 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前 - 应该是最接近的对象(最大轮廓或类似的东西进行跟踪)的面具

希望这是有帮助!