close

一般在使用Kinect SDK做骨架追蹤時,

都需要將追蹤到的骨架利用Canvas繪製出來,

方便我們確認是否有成功擷取到骨架資訊,

那如果不繪製出來該如何確認Kinect是否有成功擷取到骨架呢?


這邊我使用一個很簡單的方式來做辨認,以顏色來區分是否有抓取到骨架,如果沒追蹤到以紅色代表,追蹤到以綠色代表。


那做法很簡單,

在NuiDepthFrameReady()方法加入改變顏色的方法

//flagX,flagY 初始化值為 flagX=false,flagY=true,flagZ = true;

if (flagX) 
{

//將按鈕顏色改成綠色
button1.Background = new SolidColorBrush(Color.FromRgb(0, 255, 0));

flagZ = true; 
}
else if (flagY)
{

//將按鈕顏色改成紅色
button1.Background = new SolidColorBrush(Color.FromRgb(255, 0, 0));
}


在NuiSkeletonFrameReady()方法裡的 if (SkeletonTrackingState.Tracked == data.TrackingState) 判斷式裡面加入

flagZ=false;

flagX = true;

並在加入另一個判斷式

else if (SkeletonTrackingState.Tracked != data.TrackingState && flagZ )
flagX = false;


完整code 如下

 

private void NuiSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
    SkeletonFrame skeletonFrame = e.SkeletonFrame;
    int iSkeleton = 0;

   skeletonCanvas.Children.Clear();
   foreach (SkeletonData data in skeletonFrame.Skeletons)
  {
    if (SkeletonTrackingState.Tracked == data.TrackingState)
     {
       flagZ=false;

      flagX = true;

     }
  }
    else if (SkeletonTrackingState.Tracked != data.TrackingState && flagZ )
    flagX = false;
    iSkeleton++;
  } // for each skeleton
}

private void NuiDepthFrameReady(object sender, ImageFrameReadyEventArgs e)
{
   PlanarImage image = e.ImageFrame.Image;
   byte[] convertedDepthFrame = ConvertDepthFrame(image.Bits);

   depthImage.Source = BitmapSource.Create(
   image.Width, image.Height, 96, 96, PixelFormats.Bgr32, null, convertedDepthFrame, image.Width * 4);

  if (flagX)
  {
    button1.Background = new SolidColorBrush(Color.FromRgb(0, 255, 0));
    flagZ = true;
  }
  else if (flagY)
  {
    button1.Background = new SolidColorBrush(Color.FromRgb(255, 0, 0));
   }

}

 



arrow
arrow
    文章標籤
    Kinect SDK 骨架追蹤
    全站熱搜

    東勢厝滴yang 發表在 痞客邦 留言(0) 人氣()