在使用 pyKinect2 BodyGame 示例玩了一段时间并进行了一些研究之后,我无法弄清楚如何通过使用该关节的 x 和 y 坐标来接收关节 z 值。
作者提到:
您需要使用从 body_joints_to_depth_space github 上的原始帖子获得的 x 和 y 从深度框架中获取 z
所以我在深度空间中获取关节的 x 和 y 坐标:
depth_points = self._kinect.body_joints_to_depth_space(joints)
x = depth_points[PyKinectV2.JointType_Head].x
y = depth_points[PyKinectV2.JointType_Head].y
关节是一个指针数组(由于缺少库文档,我不知道它到底是什么),它保存了使用的 kinect 包装器提供的骨架关节的数据。但我仍然不知道得到 z 坐标。
函数调用
if self._kinect.has_new_depth_frame():
self._depth = self._kinect.get_last_depth_frame()
从设备获取最后一个深度帧。 self._depth是一个深度值数组(不是矩阵),我尝试使用 x 和 y 索引相关的深度值。(x = 水平位置,y = 垂直位置)
第一个选项是经典的矩阵索引调用:
z = self._depth[x,y]
但正如我之前提到的 self._depth 是一个数组。所以我尝试了第二个选项,这意味着通过使用原始图像矩阵的宽度来索引线性数组。
z = self._depth[ y * self._frame_surface.get_width() + x ]
但我得到了一个索引超出范围的异常。
self._frame_surface.get_width()是图像矩阵的宽度,如果我解释正确的话。(正如我之前提到的,没有 pyKinectV2 库的文档)。
所以,问题依然存在。如何获得骨骼关节的 z 值?