2014-03-28 19 views
0

所以我寫了這個事件處理程序,我打電話給SkeletonFrameReady爲什麼SkeletonFrame的骨架是空的(Kinect)?

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 
     } 

回答

0

您只分析前10幀。當前10幀中沒有找到sekeleton時(不到一秒鐘),你的應用程序將不會執行任何操作。

僅當找到骨架時才執行指令frame += 1

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