Kinect sdk 2.0 vs sdk 1.7

时间:2016-01-05 16:00:03

标签: c# kinect kinect-sdk

我写了一个与老kinect一起使用的c#程序。 我的图形库处理kinect。由于旧的Kinect已不再正式销售,我现在将其更新为更新的kinect,其中包含Microsoft SDK2.0。对于我更新的库,我尝试保持大多数编码相同。 所以我可以发布更新库而不是更新整个程序

我想知道的是,新的kinect深度数据是否仍然包含播放器数据,因为它在1.7 SDK中执行了一个位掩码操作以删除它:

realDepth[i16] = (short)(realDepth[i16] >> DepthImageFrame.PlayerIndexBitmaskWidth);

这是否仍然需要,我无法找到有关其原始深度格式的任何信息。

旧的Kinect也有一些值

  • 距离未知
  • 距离关闭
  • 到远方的距离

它仍然提供这个吗?。

1 个答案:

答案 0 :(得分:0)

在Microsoft Kinect SDK 2.0中,您无需使用位掩码操作来获取正确的深度值。

当您访问DepthFrame对象时,您可以使用以下内容:

private void ProcessDepthFrame(DepthFrame frame)
{
    int width = frame.FrameDescription.Width;
    int height = frame.FrameDescription.Height;

    ushort minDepth = frame.DepthMinReliableDistance;
    ushort maxDepth = frame.DepthMaxReliableDistance;

    ushort[] depthData = new ushort[width * height];

    frame.CopyFrameDataToArray(depthData);

    int colorIndex = 0;
    for (int depthIndex = 0; depthIndex < depthData.Length; ++depthIndex)
    {
        ushort depth = depthData[depthIndex];
        byte intensity = (byte)(depth >= minDepth && depth <= maxDepth ? depth : 0);

        // Do what you want
    }
}

另请注意,在上面的示例中,DepthMinReliableDistance类的DepthMaxReliableDistanceDepthFrame属性用于确定深度值是否有效(这是一个小的与SDK v1.x不同。

有关详细信息,请同时查看this tutorial