一般在使用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));
}
}
留言列表