两种骨骼跟踪方法在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
语句明确地执行此操作。
我已经使用 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
语句明确地执行此操作。