需要建议使用kinect在opencv中找到最近的块

时间:2011-10-05 19:27:27

标签: opencv block kinect closest

我对opencv完全不熟悉,最近我被分配了一个任务,找到kinect检测到的最近斑点的中心,这意味着如果你在kinect前伸手,那么你的手就会变得最近斑点与你的身体相比。

我给了一个示例代码,也可以在here在线找到。到目前为止,我只能想到两种方法,一种是使用cvFindContours()获取对象的所有轮廓,并循环遍历每一种方法并找到最接近的方法。问题是我不知道该怎么做,因为我不知道是否有可用于获取每个轮廓深度信息的函数。

我的第二个想法是通过depthMat矩阵循环,并找到最低值,它应该是最近的点,并传播出去找一个块,然后绘制块。这个问题是需要进行如此多的计算才能使我的kinect视频响应非常缓慢。

有没有人对此任务有好的建议?感谢。

1 个答案:

答案 0 :(得分: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
}

一旦该循环爆发,您应该具有以下内容:

  • nearestDepth - 应该是深度图像,用于通过将其与遮罩相乘来获得实际物体距离。
  • nearestDist - 应该是“black out”之前距离门的距离
  • nearestObjectMask - 应该是最近对象的掩码(跟踪它具有最大轮廓或类似的东西)

希望这有用!