绘制两个跟踪骨骼的最近骨骼(肩部-头部)Kinect SDK v1.6

绘制两个跟踪骨骼的最近骨骼(肩部-头部)Kinect SDK v1.6,kinect,closest,Kinect,Closest,我正在寻找一个解决方案来绘制最近骨骼的骨骼。我编写了代码来绘制第一个跟踪骨骼的骨骼。如果第二个人比第一个人更近,我想画第二个骨架的骨头。也许有人知道怎么做 void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame()) { // check for fr

我正在寻找一个解决方案来绘制最近骨骼的骨骼。我编写了代码来绘制第一个跟踪骨骼的骨骼。如果第二个人比第一个人更近,我想画第二个骨架的骨头。也许有人知道怎么做

void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
    using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
    {
        // check for frame drop.
        if (skeletonFrame == null)
        {
            return;
        }
        // copy the frame data in to the collection
        skeletonFrame.CopySkeletonDataTo(totalSkeleton);

        // get the first Tracked skeleton
        skeleton = (from trackskeleton in totalSkeleton
                              where trackskeleton.TrackingState == SkeletonTrackingState.Tracked
                              select trackskeleton).FirstOrDefault();


        if (skeleton != null)
        {
            if (skeleton.Joints[JointType.ShoulderCenter].TrackingState == JointTrackingState.Tracked && skeleton.Joints[JointType.Head].TrackingState == JointTrackingState.Tracked)
            {
                myCanvas.Children.Clear();
                this.DrawHead();
            }
        }
    }
}

// Draws the head.
private void DrawHead()
{
    if (skeleton != null)
    {
        drawBone(skeleton.Joints[JointType.ShoulderCenter], skeleton.Joints[JointType.Head]);
    }
}


// Draws the bone.
void drawBone(Joint trackedJoint1, Joint trackedJoint2)
{
    Line skeletonBone = new Line();
    skeletonBone.Stroke = Brushes.Black;
    skeletonBone.StrokeThickness = 3;

    Point joint1 = this.ScalePosition(trackedJoint1.Position);
    skeletonBone.X1 = joint1.X;
    skeletonBone.Y1 = joint1.Y;

    Point joint2 = this.ScalePosition(trackedJoint2.Position);
    skeletonBone.X2 = joint2.X;
    skeletonBone.Y2 = joint2.Y;

    myCanvas.Children.Add(skeletonBone);
}

/// <summary>
/// Scales the position.
/// </summary>
/// <param name="skeletonPoint">The skeltonpoint.</param>
/// <returns></returns>
private Point ScalePosition(SkeletonPoint skeletonPoint)
{
    // return the depth points from the skeleton point
    DepthImagePoint depthPoint = this.sensor.CoordinateMapper.MapSkeletonPointToDepthPoint(skeletonPoint, DepthImageFormat.Resolution640x480Fps30);
    return new Point(depthPoint.X, depthPoint.Y);
}
void传感器\u SkeletonFrameReady(对象发送器,SkeletonFrameReadyEventArgs e)
{
使用(SkeletonFrame SkeletonFrame=e.OpenSkeletonFrame())
{
//检查车架是否脱落。
if(skeletonFrame==null)
{
返回;
}
//将帧数据复制到集合中
skeletonFrame.CopySkeletonDataTo(totalSkeleton);
//获取第一个跟踪的骨架
骨架=(来自totalSkeleton中的trackskeleton
其中trackskeleton.TrackingState==SkeletonTrackingState.Tracked
选择trackskeleton).FirstOrDefault();
如果(骨架!=null)
{
if(skeleton.Joints[JointType.ShoulderCenter].TrackingState==JointTrackingState.Tracked&&skeleton.JointType.Head].TrackingState==JointTrackingState.Tracked)
{
myCanvas.Children.Clear();
这个。DrawHead();
}
}
}
}
//画头。
私人空位提取头()
{
如果(骨架!=null)
{
drawBone(skeleton.Joints[JointType.ShoulderCenter],skeleton.Joints[JointType.Head]);
}
}
//画骨头。
空心抽骨(关节跟踪接头1、关节跟踪接头2)
{
Line skeletonBone=新线();
skeletonBone.Stroke=笔刷。黑色;
skeletonBone.StrokeThickness=3;
点joint1=此.ScalePosition(trackedJoint1.Position);
skeletonBone.X1=接头1.X;
skeletonBone.Y1=关节1.Y;
Point joint2=此.ScalePosition(trackedJoint2.Position);
skeletonBone.X2=接头2.X;
skeletonBone.Y2=关节2.Y;
myCanvas.Children.Add(skeletonBone);
}
/// 
///调整位置。
/// 
///骷髅头。
/// 
专用点缩放位置(SkeletonPoint SkeletonPoint)
{
//从骨架点返回深度点
DepthImagePoint depthPoint=this.sensor.CoordinateMapper.MapSkeletonPointToDepthPoint(skeletonPoint,DepthImageFormat.Resolution640x480Fps30);
返回新点(depthPoint.X,depthPoint.Y);
}

定义某个阈值,如果骨骼在该阈值之后,则在画布上绘制连接x、y坐标。您必须添加代码以相应地更新精灵的位置。

调整了代码缩进