Kinect for Windows SDK v2.0 开发笔记 (三)深度帧与红外帧获取

转载于:https://blog.csdn.net/dustpg/article/details/40398987

使用SDK: Kinect for Windows SDK v2.0 public preview

这次就说深度帧的获取与红外帧的获取


Kinect的红外激光装置能够获取空间的深度与红外图像,因为有上次的例子,这次将非常简单。得意


深度值,Kinect用一个16位无符号整数表示深度帧上一个“深素”(深度元素,由图像元素引申),单位是毫米。

目前有效距离是(500, 4500)即半米到四米半。那么怎么可视化它呢,网上有许多深度值可视化的算法,

这里,我们就想一个简单的吧:




距离0: 距离0代表深度值无效,我们给它涂上红色


距离[1, 500), 距离不可靠,我们按照距离,涂上深浅不一的绿色。

具体大致是1涂上RGB(0,129, 0),2涂上(0, 130, 0),一直涂到(0, 255, 0),然后回到起点(0, 128, 0)...反复,

伪代码大致是: 

RGB(0, (get_depth() mod 128)+128, 0)

当然,位运算理论速度快些,所以可以改成

RGB(0, (get_depth() & 0x7F)+128, 0)


距离[4500, +∞),按照上面的算法,涂上[128, 255]的蓝色,即:

RGB(0, 0, (get_depth() mod 128)+128)


距离[500, 4500),按照上面的算法,涂上[0, 255]的灰色,即:

RGB(get_depth() & 0xFF, get_depth() & 0xFF, get_depth() & 0xFF)


差不多就是这样:

[cpp]  view plain  copy
  1. auto pRGBXBuffer = m_ImagaRenderer.GetBuffer();  
  2. // 处理算法  
  3. // 0着红色 (0, min)着128~255渐进绿色 大于max的着128~255蓝色 之间的着0~255灰色  
  4. // 不同深度渐进过度  
  5. for (UINT i = 0; i < nBufferSize; ++i){  
  6.     if (!pBuffer[i]){  
  7.         pRGBXBuffer[i].rgbRed = 0xFF;  
  8.         pRGBXBuffer[i].rgbGreen = 0;  
  9.         pRGBXBuffer[i].rgbBlue = 0;  
  10.         pRGBXBuffer[i].rgbReserved = 0xFF;  
  11.     }  
  12.     else if (pBuffer[i] < depth_min_reliable_distance){  
  13.         pRGBXBuffer[i].rgbRed = 0;  
  14.         pRGBXBuffer[i].rgbGreen = pBuffer[i] & 0x7F + 0x80;  
  15.         pRGBXBuffer[i].rgbBlue = 0;  
  16.         pRGBXBuffer[i].rgbReserved = 0xFF;  
  17.     }  
  18.     else if (pBuffer[i] > depth_max_reliable_distance){  
  19.         pRGBXBuffer[i].rgbBlue = pBuffer[i] & 0x7F + 0x80;  
  20.         pRGBXBuffer[i].rgbGreen = 0;  
  21.         pRGBXBuffer[i].rgbRed = 0;  
  22.         pRGBXBuffer[i].rgbReserved = 0xFF;  
  23.     }  
  24.     else{  
  25.         pRGBXBuffer[i].rgbBlue = pBuffer[i] & 0xFF;  
  26.         pRGBXBuffer[i].rgbGreen = pRGBXBuffer[i].rgbBlue;  
  27.         pRGBXBuffer[i].rgbRed = pRGBXBuffer[i].rgbBlue;  
  28.         pRGBXBuffer[i].rgbReserved = 0xFF;  
  29.     }  
  30. }  

至于 获取深度的代码怎么写?其实....您可以把上节中的所有带有"ColorFrame"的替换成"DepthFrame"即可,

还有一些细微的差别(比如要获取有效距离啊等等,都是依葫芦画瓢),微软偷懒,咱也偷懒


大家可以结合范例看看

效果:


"少侠!我见你印堂发黑,看来有血光之灾啊!"

"废话,没见到我身边一片红么!"


从图像看出,居然没有绿色,微软偷懒么!

居然没有蓝色!微。。。额,这是我寝室太小了

还有值得注意的是在物体周围是红色的,说明激光的入射角太大,

几乎没有光线再反射回来,于是就是无效的


下载地址:点击这里



第二部分,红外数据的获取。

从Kinect获得的红外红外数据也是一个16位无符号整数,这个整数直接代表了这个点的灰度值。

如果和一代一样的话,这16位只有高10位是有效的,10位灰度,只有高级显示器才能显示,

我们这一般的显示只能显示256级即8位灰度,所以我们应该舍弃其中2位。

请问是舍弃高2位还是低2位呢?请想想。





自然是高2位。。。不能舍弃啦,毕竟比起扔掉1万块相比,我还是愿意扔掉1块钱。

嗯,同上,微软把接口设计的差不多,把上面项目的代码中”DepthFrame“改成"InfraredFrame"估计差不多了,

详细的请看附带的范例,让我们看看效果吧:


范例下载地址:点击这里

从上看出,因为距离比较远(2米开外),导致本人几乎看不到了。为了应付这种情况,微软提供了一组

ILongExposureInfrared开头的对象,有兴趣的朋友可以去看看,这里就不多说了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kinect for Windows SDK 2.是微软推出的一款软件开发工具包,用于开发基于Kinect传感器的应用程序。它提供了丰富的API和工具,可以帮助开发者快速构建出具有深度感知、语音识别、姿态跟踪等功能的应用程序。同时,它还支持多种编程语言和开发环境,包括C++、C#、Visual Studio等,方便开发者进行开发和调试。 ### 回答2: Kinect for Windows SDK 2.0是微软公司推出的一款面向Windows平台的Kinect开发工具包。该工具包提供了一系列的工具和API,使开发者能够轻松地利用Kinect设备在Windows应用程序中实现身体姿态跟踪、语音识别、深度感应等功能。下面就详细介绍一下Kinect for Windows SDK 2.0的内容和特点。 首先,Kinect for Windows SDK 2.0支持多种操作系统,包括Windows 7、Windows 8、Windows 8.1和Windows 10,支持32位和64位的应用程序运行。它还支持多种开发语言,包括C++、C#和Visual Basic等,若使用这些语言编写代码也可以充分发挥Kinect设备的功能,帮助开发者实现其想要的效果。 其次,Kinect for Windows SDK 2.0提供了一些著名的工具和API。比如,它提供了基于深度感应器的底层API,可以实现目标检测、骨骼跟踪、手势识别等功能。这些底层API是非常有用的,因为开发者可以根据需要进行自定义设置,更好地进行应用程序开发。 此外,Kinect for Windows SDK 2.0还提供了许多高级功能,包括声学模型、语音指定、身体处于位置追踪等,这些功能是很有用的,因为它们可以让开发者的应用程序变得更加智能、全面。例如,开发者可使用该设备的语音识别功能来触发应用程序中的事件,还可以使用身体处于位置追踪功能来实现用户体验的增强,使游戏、培训等应用程序变得更加吸引人。 最后,Kinect for Windows SDK 2.0优秀的交互能力也是其非常突出的特点。它的 API 可以让开发者在应用程序中实现更加真实、独特的交互体验和增强现实效果。同时,在使用过程中,Kinect设备还可以轻松地与现有的应用程序进行整合。 总而言之,Kinect for Windows SDK 2.0是一款功能非常强大、易于使用的开发工具包,非常适合开发者用于创建基于Kinect设备的应用程序,帮助开发者实现更加智能、全面的应用程序,让 Kinect 生态系统更加繁荣。 ### 回答3: Kinect for Windows SDK2.0是微软公司发布的一款软件开发工具包,旨在帮助开发者利用Kinect传感器开发Windows应用程序。该工具包支持C++、C#、VB和JavaScript等多种编程语言,拥有丰富的API和示例代码,可以实现人体骨骼追踪、手势识别、声音识别、运动捕捉等多种功能。 首先,该工具包提供了一整套API,包含了Kinect的各种功能,如颜色和深度图像获取、骨骼跟踪、音频采集、麦克风阵列控制等。这些API可以让开发者轻松地构建运用Kinect的应用程序,提高开发效率。 其次,该工具包提供了许多示例代码和教程,可供开发者学习借鉴。这些示例代码覆盖了Kinect的各个功能,可以帮助开发者深入了解Kinect的工作原理和应用场景,从而更好地利用其开发应用程序。 此外,由于Kinect for Windows SDK2.0是一款Windows平台的软件开发工具包,所以它与Windows操作系统的兼容性较好,在开发时不需要考虑不同平台之间的兼容性问题,可以更加专注于应用程序本身的开发。 总之,Kinect for Windows SDK2.0是一款功能强大、易于使用的软件开发工具包,旨在帮助开发者充分发挥Kinect的功能和优势,构建出更具创意性和实用性的应用程序,具有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值