Kinect最有用的数据,Depth–深度数据、景深数据,其核心芯片来源参见文章《可以WPF编程的玩具:Xbox 360 Kinect–芯片》。 Depth数据提供了80mm~4m范围的深度数据(Near模式下,范围为40mm~4m),同时也提供了PlayerIndex(但在实验中,发现PlayerIndex不稳定,且渲染出人性轮廓和周边物体区分开不太清晰).
使用Depth数据,类似Color数据,也仅需三步:
步骤一:初始化Kinect
步骤二:配置Depth参数DepthImageFormat
步骤三:响应回调函数,处理DepthImageFrame数据
返回的Depth数据,实质上是一堆short[],其中每个short类型代表一个深度数据:
int player = srcData[i] & DepthImageFrame.PlayerIndexBitmask;
int realDepth = srcData[i] >> DepthImageFrame.PlayerIndexBitmaskWidth;
PlayerIndexBitmask是常量7,PlayerIndexBitmaskWidth是常量3.即后三位为PlayerID,前面13为为毫米的深度数据。
雷区:
1 PlayIndex会变化:当你走出FOV区域后,再次走进来,这个会变化。
2 要启用Depth数据,需要开通SkeletonStream.Enable。
Kinect的应用中,用到Depth数据的很多,约有20%吧! 其中测量身高是比较有趣的一个。 且,骨骼数据来自Depth数据。 有一些受限的条件是需要大于2.3米才可完整的展现一个人在屏幕中,故屏幕要大些才可看到清晰的图像。