kinect_深度图像的测试
来源:互联网 发布:淘宝退货签收还没退款 编辑:程序博客网 时间:2024/05/22 13:19
kinect_深度图像的测试
这几天试了下Kinect的深度图像的例子,测量图像像素的深度数据,Kinect处理的深度数据距离大概是0到8000mm,通过depthframe视频流,来获取深度数据。深度距离就是从摄像头到图像的各个像素点的距离。因为实验时候,像素格式为Gray16视觉效果不是很好,故采用了BGRA32的格式。
(1)实验目的:
1.如何调用depthframe视频流来处理像素。
2.什么叫做图像像素的深度。
3.对深度数据进行着色处理。
(2)实验准备
1.图像像素格式
像素格式描述了像素数据存储所用的格式。
Byte formats:
在这种格式下每个通道对应一个byte,通道在内存里的组织方式和格式名称定义的相同。例如PF_BYTE_RGBA格式的像素包含了四个byte,一个对应红色,一个绿色,一个蓝色,以及一个alpha通道。
其他像素格式我也就不意义细说了,只是数据类型变了。
2.Kinect中的深度图像像素。
ushort型深度数据的高13位代表像素与摄像头的距离,后三个代表玩家索引。故能测量的范围为0-2的13次方mm。
3.下面对这距离不同的区域进行着色处理。具体代码如下:
namespace Kinect人机交互深度图像的获取{ /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { private KinectSensor depth_kinect = null;//体感仪设备 private DepthFrameReader kinect_depthreader = null;//深度图像帧的读取器; private FrameDescription kinect_description = null;//帧的描述,所有帧的描述都用这个Framedescription private WriteableBitmap kinect_bitmap = null;//位图 private ushort[] kinect_depthdata;//储存深度图像的数组,深度图像的每个像素都用16位来表示。 private byte[] kinect_depthbrgdata;//转换成bgr格式. public MainWindow() { InitializeComponent(); this.depth_kinect = KinectSensor.GetDefault();//取得默认的体感仪设备。 this.kinect_depthreader = this.depth_kinect.DepthFrameSource.OpenReader();//初始化深度图像的变量 this.kinect_description = this.depth_kinect.DepthFrameSource.FrameDescription;//获取深度图像的高度宽度. this.kinect_depthbrgdata = new byte[this.kinect_description.LengthInPixels*4];//转换为bgra格式。 this.kinect_depthdata = new ushort[this.kinect_description.LengthInPixels]; this.kinect_bitmap = new WriteableBitmap(this.kinect_description.Width,this.kinect_description.Height, 96.0,96.0,PixelFormats.Bgra32,null);//位图的没初始化 depthimage.Source = this.kinect_bitmap;//将位图放在图像的控件上 this.kinect_depthreader.FrameArrived += kinect_depthreader_arriveed;//注册事件
this.depth_kinect.Open();}private void kinect_depthreader_arriveed(object sender, DepthFrameArrivedEventArgs e)//事件处理函数 { using (DepthFrame msf = e.FrameReference.AcquireFrame()) {//捕获一帧图像 if (msf != null) { msf.CopyFrameDataToArray(this.kinect_depthdata);//拷贝数据到ushort数组 for (int i = 0; i < this.kinect_depthdata.Length; i++) { ushort realdepth = this.kinect_depthdata[i]; if (realdepth < 500)//判断距离赋予颜色 { this.kinect_depthbrgdata[i * 4] = 0; this.kinect_depthbrgdata[i * 4 + 1] = 0; this.kinect_depthbrgdata[i * 4 + 2] = 0; this.kinect_depthbrgdata[i * 4 + 3] = 255; } else if (realdepth >= 500 && realdepth < 1500)//接下来是类似的颜色复制,我就不啰嗦了 { this.kinect_depthbrgdata[i * 4] = 0; this.kinect_depthbrgdata[i * 4 + 1] = 255; this.kinect_depthbrgdata[i * 4 + 2] = 255; this.kinect_depthbrgdata[i * 4 + 3] = 255; } else if(realdepth>=1500&&realdepth<2500){ this.kinect_depthbrgdata[i * 4] = 160; this.kinect_depthbrgdata[i * 4 + 1] = 32; this.kinect_depthbrgdata[i * 4 + 2] = 240; this.kinect_depthbrgdata[i * 4 + 3] = 255; } else if (realdepth >= 2500 && realdepth < 3500) { this.kinect_depthbrgdata[i * 4] = 255; this.kinect_depthbrgdata[i * 4 + 1] = 255; this.kinect_depthbrgdata[i * 4 + 2] = 0; this.kinect_depthbrgdata[i * 4 + 3] = 255; } else if (realdepth >= 3500&&realdepth<4500) { this.kinect_depthbrgdata[i * 4] = 192; this.kinect_depthbrgdata[i * 4 + 1] = 192; this.kinect_depthbrgdata[i * 4 + 2] = 192; this.kinect_depthbrgdata[i * 4 + 3] = 255; }else if (realdepth >= 4500 && realdepth < 5500) { this.kinect_depthbrgdata[i * 4] = 192; this.kinect_depthbrgdata[i * 4 + 1] = 0; this.kinect_depthbrgdata[i * 4 + 2] = 192; this.kinect_depthbrgdata[i * 4 + 3] = 255; } else if (realdepth >= 5500 && realdepth < 6500) { this.kinect_depthbrgdata[i * 4] = 192; this.kinect_depthbrgdata[i * 4 + 1] = 40; this.kinect_depthbrgdata[i * 4 + 2] = 192; this.kinect_depthbrgdata[i * 4 + 3] = 255; } else if (realdepth >= 6500 && realdepth < 7500) { this.kinect_depthbrgdata[i * 4] = 192; this.kinect_depthbrgdata[i * 4 + 1] = 192; this.kinect_depthbrgdata[i * 4 + 2] = 40; this.kinect_depthbrgdata[i * 4 + 3] = 255; } } this.kinect_bitmap.WritePixels(new Int32Rect(0,0,512,350),this.kinect_depthbrgdata,512*4,0); //把更新后的数据更新到位图,即可 } } } private void Window_Closed(object sender, EventArgs e)//关闭Kinect { if (this.depth_kinect != null) { this.kinect_depthreader.Dispose(); this.kinect_depthreader = null; } if (this.depth_kinect != null) { this.depth_kinect.Close(); this.depth_kinect = null; } } }}
运行时的截图如下:到摄像头不同距离的深度点的颜色不同。
图一
阅读全文
0 0
- kinect_深度图像的测试
- 深度学习文章5:使用caffe对自己的图像数据进行训练并测试
- 图像的深度和通道
- 不同深度图像的处理
- 深度图像的获取原理
- 深度图像的获取原理
- 深度图像信息的应用
- 深度图像的获取方法
- 图像识别的深度学习
- scipy的图像测试
- ubuntu 16.04 测试Kinect 1 保存深度图像
- 深度图像
- 图像深度
- 图像深度
- 图像深度
- 深度图像
- 图像深度
- 关于openGL的深度测试
- 联合国机构用区块链打击贩卖儿童
- 浅谈Spring
- SCRY亮相世界最大Fintech盛会,创始人Eva担任开场演讲嘉宾
- 基于AVR模拟I2S时序的原理分析
- Unity, C# ,TCP实现的一个简单的对话同步功能
- kinect_深度图像的测试
- springMVC中接受的参数
- 荷兰及欧盟监管机构针对ICO发出警告
- 欧盟委员会将评估欧盟区块链基础设施的潜力
- 日本的加密货币监管值得西方政府学习
- leaf开源服务器第三节-分析TCP消息通信之增加Glog日志(1)
- 在Android Studio中NDK环境配置
- 安卓IPC机制简介
- 选择排序