private void Window_Loaded(object sender, RoutedEventArgs e)
{
//首先使用LINQ语句筛选连接到电脑的Kinect设备,并赋值给kinectSensor。
kinectSensor = (from sensor in KinectSensor.KinectSensors where sensor.Status == KinectStatus.Connected select sensor).FirstOrDefault();
//然后调用DepthStream的Enable()函数启用深度图像数据,其参数为Resolution320x240Fps30,含义是设置深度图像的分辨率为320X240,帧率为30f/s。
kinectSensor.DepthStream.Enable(DepthImageFormat.Resolution320x240Fps30);
//调用start()函数启动Kinect数据流。
kinectSensor.Start();
//每当下一帧的深度图像数据准备好时,DepthFrameReady事件会通知应用程序添加一个kinectSensor_DepthFrameReady事件处理函数,以获取该事件返回的通知,参数类型为DepthImageFrameReadyEventArgs。
kinectSensor.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(kinectSensor_DepthFrameReady);
}
private void kinectSensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
using (DepthImageFrame depthImageFrame = e.OpenDepthImageFrame())//调用OpenDepthImageFrame()函数获取深度图像数据,数据类型定义为DepthImageFrame。
{
if (depthImageFrame != null)//depthImageFrame不为空代表获取到了深度图像数据
{
//调用DepthImageFrame的CopyPixelDataTo()方法,将从Kinect设备获取到的深度图像数据复制到short数组
pixelData = new short[depthImageFrame.PixelDataLength];//给pixelData分配相应的空间,大小由depthImageFrame的PixelDataLength属性决定
depthImageFrame.CopyPixelDataTo(pixelData);
/*利用获取到的数据创建一个BitmapSource,并将其赋值发给最初添加的Image控件ColorImage的Source属性。
* 这样就可以不断的将获取到的下一帧的深度图像数据刷新显示到界面上
*/
this.DepthImage.Source = BitmapSource.Create(depthImageFrame.Width,
//像素格式PixelFormats的值为Gray16,原始的深度图像数据是16位灰度图像
depthImageFrame.Height, 96, 96, PixelFormats.Gray16, null, pixelData,
depthImageFrame.Width * depthImageFrame.BytesPerPixel);
}
}
}
private void Window_Closed(object sender, EventArgs e)
{
kinectSensor.Stop();
}
}
【Kinect】4th-深度数据的处理
最新推荐文章于 2023-04-02 10:47:20 发布