KinectAzureDK编程实战_Unity下DepthMap的显示

上篇文章,我们写了如何在 Unity 下调用 Azure Kinect,并显示实时 RGB 帧的程序。

Unity 下实时显示 Azure Kinect 的 RGB 帧 无雨森,公众号:无雨森的技术分享KinectAzureDK编程实战_Unity下的显示

这篇文章,我将简述如何在 Unity 下显示实时 Depth 帧的程序。

之前,我用 C++ 实现了读取并显示 Depth 帧为彩色图的程序。我在这里的写法也类似这个程序。

C++ 下显示 Azure Kinect 的 Depth 帧为彩色图 无雨森,公众号:无雨森的技术分享KinectAzureDK编程实战_OpenCV 2 给 Depth Map 和 IR Image 着色

类似于 Unity 下显示 RGB 实时帧的流程。我们也有如下代码。

上述代码唯有一处不同。由于 Azure Kinect 的 Depth 视频帧的像素内存格式为 ushort。所以 depthImageBytes 无法简单的从 depthImage 中获取。这里我们用注释的形式先空出来。

关于下面的 C# 版的代码,请参见我之前 C++ 版代码。

ColorizeDepthImage() 函数的 C++ 代码 https://github.com/forestsen/KinectAzureDKProgramming/blob/master/StaticImageProperties.cpp

每个函数的原理,我这里也不再赘述,在我之前的文章中已经详解过。

把 Depth Map 彩色化的原理 无雨森,公众号:无雨森的技术分享KinectAzureDK编程实战_OpenCV 2 给 Depth Map 和 IR Image 着色

类似的,我们使用 ColorizeDepthImage() 函数将 short 格式的 Depth 帧转为 byte 格式的彩色帧。

我们把 depthImage 的每个像素根据当前深度摄像头模式确定每个像素的 B G R A

这里按照像素格式 short 读取像素的值。

depthImage.GetPixel<short>(h, w);

经过 ColorizeBlueToRed() 函数将 ushort 像素值转为彩色 B G R A 值。

最后,我们把 Update() 函数完整实现。

如上代码,通过 ColorizeDepthImage() 函数将 short 格式的 depthImage 转为 byte 格式的 colorizedDepthImage,然后就可以转为 byte[],由 UnityTexture2D 显示出来。

我们看一下最终效果。

下面一篇文章,我将讲述如何在 Unity 显示点云。

商业合作:

E-mail: forestsen@vip.qq.com

原文发布于微信公众号 - 无雨森的技术分享(forestsen_tech)

原文发表时间:2019-10-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券