为什么骷髅帧是空的(Kinect)

本文关键字:Kinect 骷髅 为什么 | 更新日期: 2023-09-27 17:54:38

所以我写了这个事件处理程序,我在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
        }

为什么骷髅帧是空的(Kinect)

您只分析前10帧。如果在前10帧内(不到1秒)没有发现任何骨架,应用程序将不做任何操作。

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

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