两种骨骼跟踪方法在kinect中是否正确?

Both Skeleton tracking methods are correct in kinect?

我已经使用 kinect SDK 在 C# 中开发了一个应用程序。现在我对跟踪骨骼有疑问。

我有 2 个代码,但有 2 个不同的方法。我想知道这两种方法导致相同的概念?还是不同?

代码 1:

void Kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
    using (SkeletonFrame frame = e.OpenSkeletonFrame())
    {
       m_skeletons = new Skeleton[frame.SkeletonArrayLength];
       frame.CopySkeletonDataTo(m_skeletons);
    } 

     if(m_skeletons != null && m_skeletons.Length != 0)
     { 
         foreach (Skeleton skeleton in m_skeletons)
         {
            if (skeleton != null && skeleton.TrackingState == SkeletonTrackingState.Tracked)
            {
                //doing some operations 
            }


          }

      }

}

现在还有另一种跟踪方法,例如: 代码 2:

void Kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
    using (SkeletonFrame frame = e.OpenSkeletonFrame())
    {
       m_skeletons = new Skeleton[frame.SkeletonArrayLength];
       frame.CopySkeletonDataTo(m_skeletons);
    } 

     if(m_skeletons != null && m_skeletons.Length != 0)
     { 
         foreach (Skeleton skeleton in m_skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked))
          {

               //doing some operations 
          }

      }

}

既是foreach (Skeleton skeleton in m_skeletons)又是

foreach (Skeleton skeleton in m_skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked))

正确吗?有什么区别吗?

这两种方法在功能上是等效的。

.Where(s => s.TrackingState == SkeletonTrackingState.Tracked) 创建了一个已经包含检查的枚举器。所以你的 foreach 只会迭代条件成立的元素。在另一个示例中,您使用 if 语句明确地执行此操作。