我写了一个与老kinect一起使用的c#程序。 我的图形库处理kinect。由于旧的Kinect已不再正式销售,我现在将其更新为更新的kinect,其中包含Microsoft SDK2.0。对于我更新的库,我尝试保持大多数编码相同。 所以我可以发布更新库而不是更新整个程序
我想知道的是,新的kinect深度数据是否仍然包含播放器数据,因为它在1.7 SDK中执行了一个位掩码操作以删除它:
realDepth[i16] = (short)(realDepth[i16] >> DepthImageFrame.PlayerIndexBitmaskWidth);
这是否仍然需要,我无法找到有关其原始深度格式的任何信息。
旧的Kinect也有一些值
它仍然提供这个吗?。
答案 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
类的DepthMaxReliableDistance
和DepthFrame
属性用于确定深度值是否有效(这是一个小的与SDK v1.x不同。
有关详细信息,请同时查看this tutorial。