你好,我是kinect的新手 我目前使用kinect为xbox开发kinect程序但我遇到问题而不是玩家索引值总是返回0 在我的深度帧甚至是处理函数我写道:
int playerIndex = depthFrameData[i16] & DepthImageFrame.PlayerIndexBitmask;
其中i16是i16 = 0到depthFrameData.length的循环索引 但它总是返回0 我的kinect_depthFrame代码的完整外观:
private void Kinect_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
using (DepthImageFrame frame = e.OpenDepthImageFrame())
{
if (frame != null && graphics != null && graphics.GraphicsDevice != null)
{
short[] pixelData = new short[frame.PixelDataLength];
frame.CopyPixelDataTo(pixelData);
byte[] pixelData32 = new byte[640 * 480 * 4];
for (int i16 = 0, i32 = 0; i16 < pixelData.Length && i32 < pixelData32.Length; i16++, i32 += 4)
{
int player = pixelData[i16] & DepthImageFrame.PlayerIndexBitmask;
int realDepth = pixelData[i16] >> DepthImageFrame.PlayerIndexBitmaskWidth;
byte intensity = (byte)(~(realDepth >> 4));
if (player != 0)
{
pixelData32[i32 + RedIndex] = 0;
pixelData32[i32 + GreenIndex] = 0;
pixelData32[i32 + BlueIndex] = 0;
} else {
pixelData32[i32 + RedIndex] = 255;
pixelData32[i32 + GreenIndex] = 255;
pixelData32[i32 + BlueIndex] = 255;
}
}
kinectVideo = new Texture2D(graphics.GraphicsDevice, frame.Width, frame.Height);
kinectVideo.SetData(pixelData32);
}
}
}
在骨架中,它永远不会返回玩家骨架(返回null)。在我的代码中我使用这个:
Skeleton playerSkeleton = (
from s in skeletonData where s.TrackingState == SkeletonTrackingState.Tracked
select s
).FirstOrDefault();
kinect_skeletonframeready的完整功能:
void Kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
using (SkeletonFrame frame = e.OpenSkeletonFrame())
{
if (frame != null && graphics != null && graphics.GraphicsDevice != null)
{
Skeleton[] skeletonData = new Skeleton[frame.SkeletonArrayLength];
frame.CopySkeletonDataTo(skeletonData);
Skeleton playerSkeleton = (
from s in skeletonData where s.TrackingState == SkeletonTrackingState.Tracked select s
).FirstOrDefault();
if (playerSkeleton != null)
{
Joint leftHand = playerSkeleton.Joints[JointType.HandLeft];
handPosition = new Vector2((((0.5f * leftHand.Position.X) + 0.5f) * (640)),
(((-0.5f * leftHand.Position.Y) + 0.5f) * (480)));
}
}
}
}
是xbox问题的kinect吗? 我正在使用xna来显示结果
DepthImageFrame.PlayerIndexBitmask = 7
我写这个:foreach (Skeleton s in skeletonData){
Trace.WriteLine(s.TrackingState.ToString());
}
我发现s.TrackingState总是NotTracked,其中SkeletonTrackingState.Tracked = A Tracked