我正在尝试使用XNA中的kinect进行手/手指跟踪。为此,我需要能够指定我想要程序渲染的深度范围。我看了看,我看不出这是怎么做的。据我所知,kinect的深度值仅适用于在depthStream中找到的预设范围。
我想做的是使它模块化,以便我可以改变我的kinect渲染的深度范围。我知道这已经失败但我在网上找不到任何可以告诉我如何做到这一点。
有人可以帮帮我吗?
我已经可以使用kinect渲染标准深度视图了,我为转换深度帧所做的方法如下(我感觉它在这里需要设置)
private byte[] ConvertDepthFrame(short[] depthFrame, DepthImageStream depthStream, int depthFrame32Length)
{
int tooNearDepth = depthStream.TooNearDepth;
int tooFarDepth = depthStream.TooFarDepth;
int unknownDepth = depthStream.UnknownDepth;
byte[] depthFrame32 = new byte[depthFrame32Length];
for (int i16 = 0, i32 = 0; i16 < depthFrame.Length && i32 < depthFrame32.Length; i16++, i32 += 4)
{
int player = depthFrame[i16] & DepthImageFrame.PlayerIndexBitmask;
int realDepth = depthFrame[i16] >> DepthImageFrame.PlayerIndexBitmaskWidth;
// transform 13-bit depth information into an 8-bit intensity appropriate
// for display (we disregard information in most significant bit)
byte intensity = (byte)(~(realDepth >> 8));
if (player == 0 && realDepth == 00)
{
// white
depthFrame32[i32 + RedIndex] = 255;
depthFrame32[i32 + GreenIndex] = 255;
depthFrame32[i32 + BlueIndex] = 255;
}
// omitted other if statements. Simple changed the color of the pixels if they went out of the pre=set depth values
else
{
// tint the intensity by dividing by per-player values
depthFrame32[i32 + RedIndex] = (byte)(intensity >> IntensityShiftByPlayerR[player]);
depthFrame32[i32 + GreenIndex] = (byte)(intensity >> IntensityShiftByPlayerG[player]);
depthFrame32[i32 + BlueIndex] = (byte)(intensity >> IntensityShiftByPlayerB[player]);
}
}
return depthFrame32;
}
我有一种强烈的预感,我需要在int player和int realDepth值中进行更改,但我无法确定。
答案 0 :(得分:0)
Kinect for Windows Toolkit 1.8.0中有一个名为Adaptive UI-WPF的新示例。它直接在交互区查看器部分处理此问题。看一下调整近边界和远边界的代码。它应该对您的情况有所帮助。 。