2015-03-02 66 views
0

我正在寻找解决方案来绘制最接近骨骼的骨骼。我写了代码来绘制第一个跟踪骨骼的骨骼。如果第二个人比第一个人更近,我想绘制第二个骨骼的骨骼。也许有人有任何想法如何做到这一点?绘制2个跟踪骨骼的最接近骨(肩 - 头)Kinect SDK v1.6

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); 
} 
+0

调整缩进代码 – 2015-03-07 08:37:32

回答

0

定义了一个特定的阈值,如果骨骼在该阈值之后,绘制连接画布上的x,y坐标。你将不得不添加代码来相应地更新精灵的位置。