我对opencv完全不熟悉,最近我被分配了一个任务,找到kinect检测到的最近斑点的中心,这意味着如果你在kinect前伸手,那么你的手就会变得最近斑点与你的身体相比。
我给了一个示例代码,也可以在here在线找到。到目前为止,我只能想到两种方法,一种是使用cvFindContours()获取对象的所有轮廓,并循环遍历每一种方法并找到最接近的方法。问题是我不知道该怎么做,因为我不知道是否有可用于获取每个轮廓深度信息的函数。
我的第二个想法是通过depthMat矩阵循环,并找到最低值,它应该是最近的点,并传播出去找一个块,然后绘制块。这个问题是需要进行如此多的计算才能使我的kinect视频响应非常缓慢。
有没有人对此任务有好的建议?感谢。
答案 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
}
一旦该循环爆发,您应该具有以下内容:
希望这有用!