1、kinect中测试RBG摄像头

来源:互联网 发布:java setbounds 编辑:程序博客网 时间:2024/05/16 10:32

KinectExplorer彩色摄像头测试, 在C#如何实现


概观

如何从KinectExplorer C#示例包含用户任务。在颜色视图部分,Kinect的浏览器C#示例演示如何启用彩色流和显示颜色的数据流。看到所有的细节在KinectExplorer C#示例,请使用Kinect的Windows SDK示例浏览器的

编写代码

使颜色的数据流

使用kinectSensor颜色的数据流,启动数据流,并注册事件通知。

  KinectSensor kinectSensor;    kinectSensor.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);  kinectSensor.Start();  kinectSensor.ColorFrameReady = ColorImageReady;      

调用启用方法来初始化图像数据格式,帧率和决议。有效值是在ColorImageFormat枚举。默认值为RgbResolution640x480Fps30

初始化完成后,通过调用数据流开始启动的方法。

当传感器准备下一个颜色框,ColorFrameReady事件通知应用程序。从这个事件通知注册加入ColorImageReady处理程序。你可以选择接收下一帧的颜色数据准备或的通知AllFramesReady事件发生时,所有流的下一帧是准备(颜色,深度和骨架,如果他们全部启用)。

获取颜色数据

首先,声明一个成员变量来存储像素数据和分配内存。获取字节的内存分配从数PixelDataLength属性。

  
private byte[] pixelData;  this.pixelData = new byte[imageFrame.PixelDataLength];

为了获得最佳性能,只分配一次外,每帧的渲染循环运行的内存。

彩色帧是由准备射击ColorFrameReady事件的,系统会通知您的应用程序使用此事件处理程序复制到从传感器像素数据pixelData成员。

  private void ColorImageReady(object sender, ColorImageFrameReadyEventArgs e)  {      using (ColorImageFrame imageFrame = e.OpenColorImageFrame())      {          if (imageFrame != null)          {              imageFrame.CopyPixelDataTo(this.pixelData);          }          else          {              // imageFrame is null because the request did not arrive in time          }      }  }

使用OpenColorImageFrame方法,从传感器传回的数据访问下一帧。一旦您访问帧,使用CopyPixelDataTo方法将数据复制到本地内存。要保存,所以一定只包括在这个循环处理,必须做到每帧从传感器到每一个颜色框,你将需要运行此代码。

其他情况下,可能会出现的是您的应用程序不响应速度不够快的事件通知。如果是这样的话,IMAGEFRAME参数将是空的,这意味着你不再有机会到这个数据帧传感器现已开始产生下一个数据帧,这个帧是不再有效。

呈现的颜色数据

创建一个位图来存储新的像素数据。

this.outputImage = new WriteableBitmap(imageFrame.Width, imageFrame.Height,   96, 96, PixelFormats.Bgr32, null);this.kinectColorImage.Source = this.outputImage;

创建一个WriteableBitmap的,这是一个Windows演示基础(WPF)的建设,可在。NET Framework 4,允许访问位图位。只有当像素格式的变化,而 ​​不是创建一个位图 像素数据保存每帧,你会得到更好的性能,通过创建一个WriteableBitmap。

传感器像素数据写入到WriteableBitmap的。

this.outputImage.WritePixels(new Int32Rect(0, 0, imageFrame.Width, imageFrame.Height),    this.pixelData, imageFrame.Width * Bgr32BytesPerPixel, 0);

使用WriteableBitmap.WritePixels的方法来保存像素数据。你将需要运行此代码为每一帧到达传感器,所以可以肯定这个循环里面,你可以做一点工作,以获得最佳的性能。

使用色彩数据的方法

这里有一些方法使用色彩数据:

  • 呈现的颜色数据
  • 存储颜色数据
  • 呈现颜色的深度数据和/或骨骼数据为基础数据

看看你能想象的色彩数据做!

原创粉丝点击