显示Allframes时出现问题 [英] Problem displaying Allframes

查看:99
本文介绍了显示Allframes时出现问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题,我只需要骷髅框架。


我只需要预览骨架模式并预览肘部的角度

使用Microsoft.Kinect; 
使用System;
使用System.Collections.Generic;
使用System.Linq;
使用System.Text;
使用System.Threading.Tasks;使用System.Windows
;使用System.Windows.Controls
;
使用System.Windows.Data;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;使用System.Windows.Navigation
;
使用System.Windows.Shapes;
使用Coding4Fun.Kinect.Wpf;


名称空间Kinect_Skelatal_Tracking
{
///< summary>
/// MainWindow.xaml的交互逻辑
///< / summary>
公共部分类MainWindow:Window
{
私人KinectSensor传感器;
//成员随机添加形状的变量
private Shape currentShape;



public MainWindow()
{
InitializeComponent();
sensor = KinectSensor.KinectSensors [0];
sensor.Start();
//sensor.ElevationAngle = 0;
sldMotor.Value = 0;
sldMotor.ValueChanged + = sldMotor_ValueChanged;
}
void sldMotor_ValueChanged(对象发送者,RoutedPropertyChangedEventArgs< double> e)
{
int z;

z = Convert.ToInt16(sldMotor.Value);
sensor.ElevationAngle = z;
lblValue.Content = z;
System.Threading.Thread.Sleep(100);
}

private void StartStopButton_Click(object sender,RoutedEventArgs e)
{
if(StartStopButton.Content.ToString()==" Start")
{
if(KinectSensor.KinectSensors.Count> 0)
{
KinectSensor.KinectSensors.StatusChanged + =(o,args)=>
{
Status.Content = args.Status.ToString();
};
sensor = KinectSensor.KinectSensors [0];
}
sensor.Start();
ConnectionID.Content = sensor.DeviceConnectionId;
sensor.ColorStream.Enable();
currentShape = MakeRectangle();
//为什么孩子
ImageCanvas.Children.Add(currentShape);
//sensor.ColorFrameReady + = SensorOnColorFrameReady;
//启用深度数据
sensor.DepthStream.Range = DepthRange.Near;
sensor.DepthStream.Enable();
//sensor.DepthFrameReady + = SensorOnDepthFrameReady;
//启用骨架数据
sensor.SkeletonStream.Enable();
//坐着只跟踪上部关节
sensor.SkeletonStream.TrackingMode = SkeletonTrackingMode.Seated;
sensor.SkeletonStream.EnableTrackingInNearRange = true;
//事件处理程序创建
sensor.AllFramesReady + = sensor_AllFramesReady;
StartStopButton.Content =" Stop" ;;
}
else
{
if(sensor!= null&& sensor.IsRunning)
{
sensor.Stop();
StartStopButton.Content =" Start" ;;

}
ImageCanvas.Children.Remove(currentShape);

}
}
//事件
void sensor_AllFramesReady(object sender,AllFramesReadyEventArgs e)
{
depthImagePixels = new DepthImagePixel [sensor。 DepthStream.FramePixelDataLength];
using(var frame = e.OpenDepthImageFrame())
{
if(frame == null)
return;
frame.CopyDepthImagePixelDataTo(depthImagePixels);

}
使用(var frame = e.OpenColorImageFrame())
{
if(frame == null)
return;
var bitmap = CreateBitmap(frame);
ImageCanvas.Background = new ImageBrush(bitmap);
}
///////////////////////////////////////// //////////////////////////
使用(var frame = e.OpenSkeletonFrame())
{
if(frame == null)
return;
var skeletons = new Skeleton [frame.SkeletonArrayLength];
frame.CopySkeletonDataTo(skeletons);
var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
//如果没有骷髅跳过它
if(skeleton == null)
return;
var position = skeleton.Joints [JointType.HandRight] .Position;
// NEW-Modified
// var positionR = skeleton.Joints [JointType.ElbowRight] .Position;
// mapper coordinat颜色点映射
var mapper = new CoordinateMapper(sensor);
var colorPoint = mapper.MapSkeletonPointToColorPoint(position,ColorImageFormat.RgbResolution640x480Fps30);
//跟踪联合
//Console.WriteLine("Hand位置:{0}:{1}",colorPoint.X,colorPoint.Y);
var circle = CreateCircle(colorPoint);
ImageCanvas.Children.Add(circle);


}
//弯头右配置
使用(var frame = e.OpenSkeletonFrame())
{

if(frame == null)
return;
var skeletons = new Skeleton [frame.SkeletonArrayLength];
frame.CopySkeletonDataTo(skeletons);
var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
//如果没有骷髅跳过它
if(skeleton == null)
return;
var position = skeleton.Joints [JointType.ElbowRight] .Position;
// NEW-Modified
// var positionR = skeleton.Joints [JointType.ElbowRight] .Position;
// mapper coordinat颜色点映射
var mapper = new CoordinateMapper(sensor);
var colorPoint = mapper.MapSkeletonPointToColorPoint(position,ColorImageFormat.RgbResolution640x480Fps30);
//跟踪联合
//Console.WriteLine("Hand位置:{0}:{1}",colorPoint.X,colorPoint.Y);
var circle = CreateCircle(colorPoint);
ImageCanvas.Children.Add(circle);

}
//
使用(var frame = e.OpenSkeletonFrame())
{

if(frame == null)
返回;
var skeletons = new Skeleton [frame.SkeletonArrayLength];
frame.CopySkeletonDataTo(skeletons);
var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
//如果没有骷髅跳过它
if(skeleton == null)
return;
var position = skeleton.Joints [JointType.ElbowRight] .Position;
// NEW-Modified
// var positionR = skeleton.Joints [JointType.ElbowRight] .Position;
// mapper coordinat颜色点映射
var mapper = new CoordinateMapper(sensor);
var colorPoint = mapper.MapSkeletonPointToColorPoint(position,ColorImageFormat.RgbResolution640x480Fps30);
//跟踪联合
//Console.WriteLine("Hand位置:{0}:{1}",colorPoint.X,colorPoint.Y);
var circle = CreateCircle(colorPoint);
ImageCanvas.Children.Add(circle);

}
//
使用(var frame = e.OpenSkeletonFrame())
{

if(frame == null)
返回;
var skeletons = new Skeleton [frame.SkeletonArrayLength];
frame.CopySkeletonDataTo(skeletons);
var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
//如果没有骷髅跳过它
if(skeleton == null)
return;
var position = skeleton.Joints [JointType.ElbowRight] .Position;
// NEW-Modified
// var positionR = skeleton.Joints [JointType.ElbowRight] .Position;
// mapper coordinat颜色点映射
var mapper = new CoordinateMapper(sensor);
var colorPoint = mapper.MapSkeletonPointToColorPoint(position,ColorImageFormat.RgbResolution640x480Fps30);
//跟踪联合
//Console.WriteLine("Hand位置:{0}:{1}",colorPoint.X,colorPoint.Y);
var circle = CreateCircle(colorPoint);
ImageCanvas.Children.Add(circle);

}
//
使用(var frame = e.OpenSkeletonFrame())
{

if(frame == null)
返回;
var skeletons = new Skeleton [frame.SkeletonArrayLength];
frame.CopySkeletonDataTo(skeletons);
var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
//如果没有骷髅跳过它
if(skeleton == null)
return;
var position = skeleton.Joints [JointType.ElbowRight] .Position;
// NEW-Modified
// var positionR = skeleton.Joints [JointType.ElbowRight] .Position;
// mapper coordinat颜色点映射
var mapper = new CoordinateMapper(sensor);
var colorPoint = mapper.MapSkeletonPointToColorPoint(position,ColorImageFormat.RgbResolution640x480Fps30);
//跟踪联合
//Console.WriteLine("Hand位置:{0}:{1}",colorPoint.X,colorPoint.Y);
var circle = CreateCircle(colorPoint);
ImageCanvas.Children.Add(circle);

}
//
使用(var frame = e.OpenSkeletonFrame())
{

if(frame == null)
返回;
var skeletons = new Skeleton [frame.SkeletonArrayLength];
frame.CopySkeletonDataTo(skeletons);
var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
//如果没有骷髅跳过它
if(skeleton == null)
return;
var position = skeleton.Joints [JointType.ElbowRight] .Position;
// NEW-Modified
// var positionR = skeleton.Joints [JointType.ElbowRight] .Position;
// mapper coordinat颜色点映射
var mapper = new CoordinateMapper(sensor);
var colorPoint = mapper.MapSkeletonPointToColorPoint(position,ColorImageFormat.RgbResolution640x480Fps30);
//跟踪联合
//Console.WriteLine("Hand位置:{0}:{1}",colorPoint.X,colorPoint.Y);
var circle = CreateCircle(colorPoint);
ImageCanvas.Children.Add(circle);

}
//
使用(var frame = e.OpenSkeletonFrame())
{

if(frame == null)
返回;
var skeletons = new Skeleton [frame.SkeletonArrayLength];
frame.CopySkeletonDataTo(skeletons);
var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
//如果没有骷髅跳过它
if(skeleton == null)
return;
var position = skeleton.Joints [JointType.ElbowRight] .Position;
// NEW-Modified
// var positionR = skeleton.Joints [JointType.ElbowRight] .Position;
// mapper coordinat颜色点映射
var mapper = new CoordinateMapper(sensor);
var colorPoint = mapper.MapSkeletonPointToColorPoint(position,ColorImageFormat.RgbResolution640x480Fps30);
//跟踪联合
//Console.WriteLine("Hand位置:{0}:{1}",colorPoint.X,colorPoint.Y);
var circle = CreateCircle(colorPoint);
ImageCanvas.Children.Add(circle);

}
}

//方法
私有形状CreateCircle(ColorImagePoint colorPoint)
{
var circle = new Ellipse ();
circle.Fill = Brushes.Red;
circle.Height = 20;
circle.Width = 20;
circle.Stroke = Brushes.Red;
circle.StrokeThickness = 2;
Canvas.SetLeft(circle,colorPoint.X);
Canvas.SetTop(circle,colorPoint.Y);
返回圈子;

}



// private void SensorOnDepthFrameReady(object sender,DepthImageFrameReadyEventArgs depthImageFrameReady)
// {
// using(var frame = depthImageFrameReady.OpenDepthImageFrame())
// {
// var depthImagePixels = new DepthImagePixel [sensor.DepthStream.FramePixelDataLength];
// frame.CopyDepthImagePixelDataTo(depthImagePixels);
// //每像素1个字节
// var colorPixels = new byte [4 * sensor.DepthStream.FramePixelDataLength];
// for(int i = 0; i< colorPixels.Length; i + = 4)
// {
// if(depthImagePixels [i / 4] .PlayerIndex!= 0)
//
// {
// colorPixels [i + 1] = 255;
//}
//}
// ImageCanvas.Background = new ImageBrush(colorPixels.ToBitmapSource(640,480));
//ImageCanvas.Background = new ImageBrush(frame.ToBitmapSource());
//}
//}
// ALL FRAMES READY



//新方法
//矩形图像上的外观

private Rectangle MakeRectangle()
{
var rectangle = new Rectangle();
rectangle.Stroke = Brushes.Blue;
rectangle.Width = 100;
rectangle.Height = 100;
rectangle.StrokeThickness = 2;
rectangle.Fill = Brushes.Blue;
//图像上矩形的位置
var random = new Random();
Canvas.SetLeft(rectangle,random.Next((int)(ImageCanvas.Width - 100)));
Canvas.SetTop(rectangle,random.Next((int)(ImageCanvas.Height - 100)));
返回矩形;
}
// ba3d 7atet传感器所有帧准备好hashelo
//私有void SensorOnColorFrameReady(对象发送者,ColorImageFrameReadyEventArgs colorImageFrameReady)
// {
//使用(var frame = colorImageFrameReady.OpenColorImageFrame())
// {
//我们将来使用它在使用Coding4Fun之后我们可以使用以下语句
//ImageCanvas.Background = new ImageBrush(frame .ToBitmapSource());
// var bitmap = CreateBitmap(frame);
// ImageCanvas.Background = new ImageBrush(bitmap);
//}
//}

private BitmapSource CreateBitmap(ColorImageFrame frame)
{
var pixelData = new byte [frame.PixelDataLength];
frame.CopyPixelDataTo(pixelData);

GrayscaleData(pixelData);

var stride = frame.Width * frame.BytesPerPixel;
var bitmap = BitmapSource.Create(frame.Width,frame.Height,96,96,PixelFormats.Bgr32,null,pixelData,
stride);
返回位图;
}
// GrayScale图像
// Shelna静态
private void GrayscaleData(byte [] pixelData)
{
var mapper = new CoordinateMapper(sensor );
var depthPoints = new DepthImagePoint [640 * 480];
mapper.MapColorFrameToDepthFrame(ColorImageFormat.RgbResolution640x480Fps30,DepthImageFormat.Resolution640x480Fps30,depthImagePixels,depthPoints);
for(int i = 0; i< depthPoints.Length; i ++)
{
var point = depthPoints [i];
//通过添加kinectsensor.Isknown来提高准确性......
if(point.Depth> 600 ||!KinectSensor.IsKnownPoint(point))
{
var pixelDataIndex = i * 4;
var max = Math.Max(pixelData [pixelDataIndex],Math.Max(pixelData [pixelDataIndex + 1],pixelData [pixelDataIndex + 2]));
pixelData [pixelDataIndex] = max;
pixelData [pixelDataIndex + 1] = max;
pixelData [pixelDataIndex + 2] = max;
}
}
}



// for(int i = 0; i< pixelData.Length; i + = 4)
// {

// if(depthImagePixels [i / 4] .Depth> 600)
// {
// // RGB值
// var max = Math.Max(pixelData [i],Math.Max(pixelData [i + 1],pixelData [i + 2]));
// pixelData [i] = max;
// pixelData [i + 1] = max;
// pixelData [i + 2] = max;
//}
//}
//}




private void TakePictureButton_Click(对象发送者,RoutedEventArgs e )
{
using(var frame = sensor.ColorStream.OpenNextFrame(0))
{
var bitmap = CreateBitmap(frame);
ImageCanvas.Background = new ImageBrush(bitmap);
}
}



public DepthImagePixel [] depthImagePixels {get;组; }
}
}

解决方案

如果你只想要骨架,你可以遵循QuickStart骨架基础并设置传感器只提供骨架数据。 http://channel9.msdn.com/Series/KinectQuickstart/Skeletal-Tracking-Fundamentals


I have a problem that i only need Skeleton frame.

I need to preview skeleton mode only and to preview the angle of elbows

using Microsoft.Kinect;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Coding4Fun.Kinect.Wpf;


namespace Kinect_Skelatal_Tracking
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private KinectSensor sensor;
        //member Variable which will add a shape randomly
        private Shape currentShape;



        public MainWindow()
        {
            InitializeComponent();
            sensor = KinectSensor.KinectSensors[0];
            sensor.Start();
            //sensor.ElevationAngle = 0;
            sldMotor.Value = 0;
            sldMotor.ValueChanged += sldMotor_ValueChanged;
        }
        void sldMotor_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            int z;

            z = Convert.ToInt16(sldMotor.Value);
            sensor.ElevationAngle = z;
            lblValue.Content = z;
            System.Threading.Thread.Sleep(100);
        }

        private void StartStopButton_Click(object sender, RoutedEventArgs e)
        {
            if (StartStopButton.Content.ToString() == "Start")
            {
                if (KinectSensor.KinectSensors.Count > 0)
                {
                    KinectSensor.KinectSensors.StatusChanged += (o, args) =>
                    {
                        Status.Content = args.Status.ToString();
                    };
                    sensor = KinectSensor.KinectSensors[0];
                }
                sensor.Start();
                ConnectionID.Content = sensor.DeviceConnectionId;
                sensor.ColorStream.Enable();
                currentShape = MakeRectangle();
                //Why Children
                ImageCanvas.Children.Add(currentShape);
                //sensor.ColorFrameReady += SensorOnColorFrameReady;
                //Enabling Depth Data
                sensor.DepthStream.Range = DepthRange.Near;
                sensor.DepthStream.Enable();
                //sensor.DepthFrameReady += SensorOnDepthFrameReady;
                //Enabling Skeleton Data
                sensor.SkeletonStream.Enable();
                //Seated will only track the upper joints
                sensor.SkeletonStream.TrackingMode = SkeletonTrackingMode.Seated;
                sensor.SkeletonStream.EnableTrackingInNearRange = true;
                //Event Handler created
                sensor.AllFramesReady += sensor_AllFramesReady;
                StartStopButton.Content = "Stop";
            }
            else
            {
                if (sensor != null && sensor.IsRunning)
                {
                    sensor.Stop();
                    StartStopButton.Content = "Start";

                }
                ImageCanvas.Children.Remove(currentShape);

            }
        }
        //Event
        void sensor_AllFramesReady(object sender, AllFramesReadyEventArgs e)
        {
            depthImagePixels = new DepthImagePixel[sensor.DepthStream.FramePixelDataLength];
            using (var frame = e.OpenDepthImageFrame())
            {
                if (frame == null)
                    return;
                frame.CopyDepthImagePixelDataTo(depthImagePixels);

            }
            using (var frame = e.OpenColorImageFrame())
            {
                if (frame == null)
                    return;
                var bitmap = CreateBitmap(frame);
                ImageCanvas.Background = new ImageBrush(bitmap);
            }
            ///////////////////////////////////////////////////////////////////
            using (var frame = e.OpenSkeletonFrame())
            {
                if (frame == null)
                    return;
                var skeletons = new Skeleton[frame.SkeletonArrayLength];
                frame.CopySkeletonDataTo(skeletons);
                var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
                //if no skeletons jump it
                if (skeleton == null)
                    return;
                var position = skeleton.Joints[JointType.HandRight].Position;
                //NEW-Modified
                //var positionR = skeleton.Joints[JointType.ElbowRight].Position;
                //mapper coordinat Color point Map
                var mapper = new CoordinateMapper(sensor);
                var colorPoint = mapper.MapSkeletonPointToColorPoint(position, ColorImageFormat.RgbResolution640x480Fps30);
                //Tracking Joint
                //Console.WriteLine("Hand position: {0} : {1}", colorPoint.X,colorPoint.Y );
                var circle = CreateCircle(colorPoint);
                ImageCanvas.Children.Add(circle);
            
               
            }
            //Elbow Right Configuration
            using (var frame = e.OpenSkeletonFrame())
            {
                
                if (frame == null)
                    return;
                var skeletons = new Skeleton[frame.SkeletonArrayLength];
                frame.CopySkeletonDataTo(skeletons);
                var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
                //if no skeletons jump it
                if (skeleton == null)
                    return;
                var position = skeleton.Joints[JointType.ElbowRight].Position;
                //NEW-Modified
                //var positionR = skeleton.Joints[JointType.ElbowRight].Position;
                //mapper coordinat Color point Map
                var mapper = new CoordinateMapper(sensor);
                var colorPoint = mapper.MapSkeletonPointToColorPoint(position, ColorImageFormat.RgbResolution640x480Fps30);
                //Tracking Joint
                //Console.WriteLine("Hand position: {0} : {1}", colorPoint.X,colorPoint.Y );
                var circle = CreateCircle(colorPoint);
                ImageCanvas.Children.Add(circle);

            }
            //
            using (var frame = e.OpenSkeletonFrame())
            {

                if (frame == null)
                    return;
                var skeletons = new Skeleton[frame.SkeletonArrayLength];
                frame.CopySkeletonDataTo(skeletons);
                var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
                //if no skeletons jump it
                if (skeleton == null)
                    return;
                var position = skeleton.Joints[JointType.ElbowRight].Position;
                //NEW-Modified
                //var positionR = skeleton.Joints[JointType.ElbowRight].Position;
                //mapper coordinat Color point Map
                var mapper = new CoordinateMapper(sensor);
                var colorPoint = mapper.MapSkeletonPointToColorPoint(position, ColorImageFormat.RgbResolution640x480Fps30);
                //Tracking Joint
                //Console.WriteLine("Hand position: {0} : {1}", colorPoint.X,colorPoint.Y );
                var circle = CreateCircle(colorPoint);
                ImageCanvas.Children.Add(circle);

            }
            //
            using (var frame = e.OpenSkeletonFrame())
            {

                if (frame == null)
                    return;
                var skeletons = new Skeleton[frame.SkeletonArrayLength];
                frame.CopySkeletonDataTo(skeletons);
                var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
                //if no skeletons jump it
                if (skeleton == null)
                    return;
                var position = skeleton.Joints[JointType.ElbowRight].Position;
                //NEW-Modified
                //var positionR = skeleton.Joints[JointType.ElbowRight].Position;
                //mapper coordinat Color point Map
                var mapper = new CoordinateMapper(sensor);
                var colorPoint = mapper.MapSkeletonPointToColorPoint(position, ColorImageFormat.RgbResolution640x480Fps30);
                //Tracking Joint
                //Console.WriteLine("Hand position: {0} : {1}", colorPoint.X,colorPoint.Y );
                var circle = CreateCircle(colorPoint);
                ImageCanvas.Children.Add(circle);

            }
            //
            using (var frame = e.OpenSkeletonFrame())
            {

                if (frame == null)
                    return;
                var skeletons = new Skeleton[frame.SkeletonArrayLength];
                frame.CopySkeletonDataTo(skeletons);
                var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
                //if no skeletons jump it
                if (skeleton == null)
                    return;
                var position = skeleton.Joints[JointType.ElbowRight].Position;
                //NEW-Modified
                //var positionR = skeleton.Joints[JointType.ElbowRight].Position;
                //mapper coordinat Color point Map
                var mapper = new CoordinateMapper(sensor);
                var colorPoint = mapper.MapSkeletonPointToColorPoint(position, ColorImageFormat.RgbResolution640x480Fps30);
                //Tracking Joint
                //Console.WriteLine("Hand position: {0} : {1}", colorPoint.X,colorPoint.Y );
                var circle = CreateCircle(colorPoint);
                ImageCanvas.Children.Add(circle);

            }
            //
            using (var frame = e.OpenSkeletonFrame())
            {

                if (frame == null)
                    return;
                var skeletons = new Skeleton[frame.SkeletonArrayLength];
                frame.CopySkeletonDataTo(skeletons);
                var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
                //if no skeletons jump it
                if (skeleton == null)
                    return;
                var position = skeleton.Joints[JointType.ElbowRight].Position;
                //NEW-Modified
                //var positionR = skeleton.Joints[JointType.ElbowRight].Position;
                //mapper coordinat Color point Map
                var mapper = new CoordinateMapper(sensor);
                var colorPoint = mapper.MapSkeletonPointToColorPoint(position, ColorImageFormat.RgbResolution640x480Fps30);
                //Tracking Joint
                //Console.WriteLine("Hand position: {0} : {1}", colorPoint.X,colorPoint.Y );
                var circle = CreateCircle(colorPoint);
                ImageCanvas.Children.Add(circle);

            }
            //
            using (var frame = e.OpenSkeletonFrame())
            {

                if (frame == null)
                    return;
                var skeletons = new Skeleton[frame.SkeletonArrayLength];
                frame.CopySkeletonDataTo(skeletons);
                var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
                //if no skeletons jump it
                if (skeleton == null)
                    return;
                var position = skeleton.Joints[JointType.ElbowRight].Position;
                //NEW-Modified
                //var positionR = skeleton.Joints[JointType.ElbowRight].Position;
                //mapper coordinat Color point Map
                var mapper = new CoordinateMapper(sensor);
                var colorPoint = mapper.MapSkeletonPointToColorPoint(position, ColorImageFormat.RgbResolution640x480Fps30);
                //Tracking Joint
                //Console.WriteLine("Hand position: {0} : {1}", colorPoint.X,colorPoint.Y );
                var circle = CreateCircle(colorPoint);
                ImageCanvas.Children.Add(circle);

            }
        }

        //METHOD
        private Shape CreateCircle(ColorImagePoint colorPoint)
        {
            var circle = new Ellipse();
            circle.Fill = Brushes.Red;
            circle.Height = 20;
            circle.Width = 20;
            circle.Stroke = Brushes.Red;
            circle.StrokeThickness = 2;
            Canvas.SetLeft(circle, colorPoint.X);
            Canvas.SetTop(circle, colorPoint.Y);
            return circle;

        }



  //      private void SensorOnDepthFrameReady(object sender, DepthImageFrameReadyEventArgs depthImageFrameReady)
    //    {
      //      using (var frame = depthImageFrameReady.OpenDepthImageFrame())
        //    {
          //      var depthImagePixels = new DepthImagePixel[sensor.DepthStream.FramePixelDataLength];
            //    frame.CopyDepthImagePixelDataTo(depthImagePixels);
              //  //1 byte per pixel
 //               var colorPixels = new byte[4 * sensor.DepthStream.FramePixelDataLength];
   //             for (int i = 0; i < colorPixels.Length; i += 4)
     //           {
       //             if (depthImagePixels[i / 4].PlayerIndex != 0)
        //
          //          {
            //            colorPixels[i + 1] = 255;
              //      }
            //    }
              //  ImageCanvas.Background = new ImageBrush(colorPixels.ToBitmapSource(640, 480));
                //ImageCanvas.Background = new ImageBrush(frame.ToBitmapSource());
           // }
       // }
        //ALL FRAMES READY
     
      
       
        //New Method
        //Rectangle Apperance on the image

        private Rectangle MakeRectangle()
        {
            var rectangle = new Rectangle();
            rectangle.Stroke = Brushes.Blue;
            rectangle.Width = 100;
            rectangle.Height = 100;
            rectangle.StrokeThickness = 2;
            rectangle.Fill = Brushes.Blue;
            //Location of the Rectangle on the Image
            var random = new Random();
            Canvas.SetLeft(rectangle, random.Next((int)(ImageCanvas.Width - 100)));
            Canvas.SetTop(rectangle, random.Next((int)(ImageCanvas.Height - 100)));
            return rectangle;
        }
        //ba3d 7atet Sensor all frames ready hashelo 
      //  private void SensorOnColorFrameReady(object sender, ColorImageFrameReadyEventArgs colorImageFrameReady)
      //  {
        //    using (var frame = colorImageFrameReady.OpenColorImageFrame())
          //  {
                // We will use it in future After Using Coding4Fun we Can use the following statement
                //ImageCanvas.Background = new ImageBrush(frame.ToBitmapSource());
           //     var bitmap = CreateBitmap(frame);
             //   ImageCanvas.Background = new ImageBrush(bitmap);
        //    }
        //}

        private  BitmapSource CreateBitmap(ColorImageFrame frame)
        {
            var pixelData = new byte[frame.PixelDataLength];
            frame.CopyPixelDataTo(pixelData);

            GrayscaleData(pixelData);

            var stride = frame.Width * frame.BytesPerPixel;
            var bitmap = BitmapSource.Create(frame.Width, frame.Height, 96, 96, PixelFormats.Bgr32, null, pixelData,
                stride);
            return bitmap;
        }
        //GrayScale Image
        //Shelna Static
        private void GrayscaleData(byte[] pixelData)
        {
            var mapper = new CoordinateMapper(sensor);
            var depthPoints = new DepthImagePoint[640 * 480];
            mapper.MapColorFrameToDepthFrame(ColorImageFormat.RgbResolution640x480Fps30, DepthImageFormat.Resolution640x480Fps30, depthImagePixels, depthPoints);
            for (int i = 0; i < depthPoints.Length; i++)
            {
                var point = depthPoints[i];
                //improving accuracy by adding kinectsensor.Isknown......
                if (point.Depth > 600 || !KinectSensor.IsKnownPoint(point))
                {
                    var pixelDataIndex = i * 4;
                    var max = Math.Max(pixelData[pixelDataIndex], Math.Max(pixelData[pixelDataIndex + 1], pixelData[pixelDataIndex + 2]));
                    pixelData[pixelDataIndex] = max;
                    pixelData[pixelDataIndex + 1] = max;
                    pixelData[pixelDataIndex + 2] = max;
                }
            }
        }



           // for (int i = 0; i < pixelData.Length; i += 4)
            //{

              //  if (depthImagePixels[i / 4].Depth > 600)
                //{
                  //  //RGB Values
                    //var max = Math.Max(pixelData[i], Math.Max(pixelData[i + 1], pixelData[i + 2]));
                    //pixelData[i] = max;
                    //pixelData[i + 1] = max;
                    //pixelData[i + 2] = max;
            //    }
            //}
   //     }




        private void TakePictureButton_Click(object sender, RoutedEventArgs e)
        {
            using (var frame = sensor.ColorStream.OpenNextFrame(0))
            {
                var bitmap = CreateBitmap(frame);
                ImageCanvas.Background = new ImageBrush(bitmap);
            }
        }



        public DepthImagePixel[] depthImagePixels { get; set; }
    }
}

解决方案

If you only want skeleton you can follow the QuickStart skeleton fundamental and setup your sensor to only provide Skeleton data.http://channel9.msdn.com/Series/KinectQuickstart/Skeletal-Tracking-Fundamentals


这篇关于显示Allframes时出现问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆