两种骨架跟踪方法在kinect中都是正确的吗?

时间:2016-07-16 07:58:09

标签: c# windows kinect kinect-sdk kinect-interaction

我使用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))

是对的吗?有什么区别吗?

1 个答案:

答案 0 :(得分:1)

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

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