2

我正在使用 OpenNI 的 HandsGenerator 类,我想用它来跟踪用户的动作。

我已经注册了自己的回调来获取手的更新位置,一切正常,除了我找不到返回的坐标系等信息XnPoint3D。是否有一个规范可以精确地指定 X、Y、Z 范围,也许还有缩放信息(这样我就知道 100 的变化XnPoint3D对应X于 10 厘米的移动,或其他东西)。

4

1 回答 1

2

HandsGenerator 从传感器返回以毫米为单位的真实世界坐标。这意味着位于深度图中间的深度点的 X 和 Y 将为 0。

100 的变化(X、Y 或 Z)确实是 10 厘米的变化(100 毫米 = 10 厘米)。

X 和 Y 值的范围取决于手点的 Z 值。假设您在深度图的左上角有一个手点(或投影坐标中的 0,0),可能的 X 和 Y 值取决于手的距离。手越近,X 和 Y 越小。要获得手位置的最大范围,您应该选择任意的最大 Z 值,然后找到该距离处深度图角落的 X 和 Y 值。或者换句话说 - 将投影坐标 (0,0,maxZ) 和 (DepthmapWidth,DepthmapHeight,maxZ) 转换为真实世界坐标。所有 Z 值小于 maxZ 的手点将落在这 2 个真实世界坐标之间)

请注意,您可以使用 DepthGenerator::ConvertProjectiveToRealWorld 将投影坐标转换​​为真实世界。

于 2012-06-29T20:08:25.997 回答