Kinect获取深度图和深度数据

2022-08-29 09:34:36 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

做关于深度信息处理的,正好实验室配备了kinect2代,就想着先用kinect获取深度信息来处理,之后换其他设备只要有深度信息就直接往后推进就行,不过网上教程虽然多,但是第一次总会栽进坑中,记录一波,下回重来的时候长个教训。

  1. 配置参考Kinect SDK 因为现在很多版本都相对比较(额,过去式吧)这个是关于kinect v2 Windows10 VS2017(博主和微软官网都要求的VS2012或者13,但是我电脑之前配的17,是可以用的)。下载Kinect for Windows SDK2.0, 官网下载 直接安装,安装的时候不需要连接kinect设备,但是安装之后一定要重启电脑(因没有重启,之后一直出现错误)重启,重启,重启!重要的事情说三遍!!!
  2. 重启之后插入kinect USB3.0(接口没有写3.0啊,就是带点蓝色的那个USB),插上电源,就会自动安装驱动。在设备管理器里确定kinect设备已经安装好了,之后在开始处打开我们刚刚安装好的SDK Browser v2.0,但是我这里因为之前没有重启的缘故,在打开Samples C#的时候出现这样的问题,左下角示例,其实解决方案重启下电脑就好,但是自己菜啊!
  1. SDK配置成功之后,要自己实现编程的话,要配置下。在之前配置opencv成功的那个项目里继续配置了kinect VS中配置 我的是VS2017版本没得问题
  2. 考虑深度信息,在搜索栏里输入kinect获取深度信息,资料很多,代码也层出不穷。但是很多的都是直接获深度信息图,关于深度数据后面再讨论,这个说几个问题。 A. 有的代码粘过来会出现“无法打开Nuiapi.h文件”,这是因为你配置的版本是kinect v2,而那个无法打开的文件是v1系列里面的头文件,v2不包含也不是配置的问题了,应该就是不支持,建议换代码 获取深度图代码代码测试可以直接出来深度图,那些黑的地方是无法检测到的位置,噪声还是很明显的。(v1相比于v2更多是调用NUI的方法)

C. 微软上关于kinect v2 的官方文档 官网Kinect v2文档 关于代码中的一些函数接口,在我们打开的SDK Browser v2.0也可以直接get到

D. Kinect Sensor类(属性的功能了解下),代码里主要就是这类在用

E. 关于HRESULE 百科上的解释:函数返回值。32位,其最高位(bit)如果是0表示成功,1表示错误。具体参见 MSDN(微软开发者网络) 之”Structure of COM Error Codes”说明。我们在程序中如果需要判断返回值,则可以使用比较运算符号;switch开关语句;也可以使用VC提供的宏: HRESULT hr = 调用组件函数;

F. 有的代码里有ConvertMat函数,实现转换depth图像到cv::Mat,这是因为

基本都是关于代码,看文档知道有哪些接口怎么用就行

  1. 之前怎么搜索都是直接深度图depth map显示,但我实际上想要获取到深度数据,也就是物体距离传感器的深度值Z,在搜索时选择kinect获取三维坐标

参照代码,直接运行,可以出来深度图,在深度图上点击就可以出现该位置的三维坐标信息 代码链接

方括号里面是像素坐标x,y,最后一个就是需要的深度Z值,单位是毫米。大小为0的地方,是该位置处侦测不到像素点的深度,同时三维坐标文本信息保存在相应项目文件夹下。要转化为世界坐标系网上也有很多教程,不过考虑到之后要实现的任务,后面可能会考虑用Unity Kinect获取到场景中的每个像素的深度值,再考虑shader实虚实遮挡的可能性。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145957.html原文链接:https://javaforall.cn

0 人点赞