您可以尝试迭代范围选通。Kinect 的最大有效范围约为 6m,因此对于有限的距离,这可能会起作用。
假设深度以厘米为单位(如果以计数为单位,则将计数分成 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
}
一旦该循环中断,您应该具有以下内容:
- 最近深度 - 应该是深度图像,用于通过将其与蒙版相乘来获得实际对象距离。
- 最近的距离 - 应该是“停电”之前的距离门的距离
- 最近对象掩码 - 应该是最近对象的掩码(用最大轮廓或类似的东西跟踪它)
希望这会有所帮助!