我编写了一个与旧kinect一起工作的c#程序。我的图形库处理kinect。由于旧的Kinect不再正式销售,我现在用它的MicrosoftSDK2.0更新到较新的kinect one。对于我更新的库,我尽量保持大多数编码相同。因此,我可以发布一个更新库,而不是更新整个程序。
我想知道的是,新的kinect深度数据是否仍然包含播放器数据,就像它在1.7SDK中所做的那样--我做了一个位掩码操作来删除它:
realDepth[i16] = (short)(realDepth[i16] >> DepthImageFrame.PlayerIndexBitmaskWidth);如果这还需要,我找不到任何关于它的原始深度格式的信息。
旧的Kinect,也有一些价值
它还能提供这个吗?
发布于 2016-01-31 01:40:35
在Microsoft SDK2.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类的属性来计算深度值是否有效(这与SDKv1.x略有不同)。
有关更多信息,请查看本教程。
https://stackoverflow.com/questions/34615955
复制相似问题