显示Allframes时出现问题 [英] Problem displaying Allframes
本文介绍了显示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屋!
查看全文