为什么SkeletonFrame的骨架是空的(Kinect)?

时间:2014-03-28 10:47:00

标签: c# kinect kinect-sdk

所以我写了这个事件处理程序,我在SkeletonFrameReady上调用了它。

sensor.SkeletonFrameReady += InitializeHandler;
sensor.SkeletonStream.Enable();

这个想法是它以一种计算关节平均值的方式初始化传感器。坐标。但是initSkeleton仍为null,因此未添加任何向量。为什么会这样?

private void InitializeHandler(object sender, SkeletonFrameReadyEventArgs e)
        {
            if (frame <= 10)
            {
                frame += 1;
                using (SkeletonFrame initSkeletonFrame = e.OpenSkeletonFrame())
                {
                    if (this.initSkeletons == null)
                    {
                        this.initSkeletons = new Skeleton[initSkeletonFrame.SkeletonArrayLength];
                    }
                    initSkeletonFrame.CopySkeletonDataTo(initSkeletons);
                    Skeleton initSkeleton = this.initSkeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked).FirstOrDefault();
                    if (initSkeleton != null)
                    {
                        foreach (Joint j in initSkeleton.Joints)
                        {
                            Vector3D tmp = new Vector3D(j.Position.X, j.Position.Y, j.Position.Z);
                            vectors.Add(tmp);
                            Console.Write(vectors.Count);
                        }
                    }
                }
            }
        // ... calculations
        }

1 个答案:

答案 0 :(得分:0)

您只分析前10帧。如果在前10帧中找不到任何骨架(在不到一秒的时间内),您的应用程序将不会执行任何操作。

仅在找到骨架时执行指令frame += 1

if (initSkeleton != null)
{
     frame += 1;
     foreach (Joint j in initSkeleton.Joints) {...}    
}