所以我写了这个事件处理程序,我在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
}
答案 0 :(得分:0)
您只分析前10帧。如果在前10帧中找不到任何骨架(在不到一秒的时间内),您的应用程序将不会执行任何操作。
仅在找到骨架时执行指令frame += 1
。
if (initSkeleton != null)
{
frame += 1;
foreach (Joint j in initSkeleton.Joints) {...}
}