2

我正在使用 OPENNI 和 NITE,我试图从 PrimeSense 提供的 StickFigure 示例中获取 3 种类型的信息,

  1. 每个关节的 X、Y 和 Z 坐标 - 我可以这样做,例如左手,以下函数将 x、y、z 坐标返回到 BXN_SKEL_LEFT_HAND 对象 g_UserGenerator.GetSkeletonCap().GetSkeletonJointPosition(user,XN_SKEL_LEFT _HAND , BXN_SKEL_LEFT_HAND) ;

现在我需要以下两个方面的帮助::

  1. 如何获得相同的 RGB 值?

  2. 如何获取与 StickFigure 的边界相关的数据,当我指的是边界时,我指的是 blob 数据或与正在识别 Stick Figure 的人的肉/轮廓部分相关联的数据?

任何建议或解决方案都受到高度赞赏。

谢谢你

4

2 回答 2

0
  1. xnConvertRealWorldToProjective(depthGenerator.ConvertRealWorldToProjective 与 C++ 包装器)将把世界空间中的一个点(就像你从骨架中得到的一样)转换回深度图中的 2d 像素坐标。通过按照 depthGenerator.GetAlternativeViewpointCap().SetAlternativeViewpoint(imageGenerator) 的方式来启用深度配准。

    这会修改深度,使其看起来好像是从 RGB CMOS 的位置捕获的(例如,深度和 rgb 像素将完全对齐),因此您可以使用另一个中的坐标(由于分辨率差异可能会缩放 x,y 除外) .

  2. 您的用户生成器节点有一个名为 GetUserPixels 的函数(例如 users.GetUserPixels(0, sceneMD)),它将使用标签映射填充场景元数据对象 - 一个 16-bpp 像素映射,其中每个像素都是拥有用户的标识符像素,如果像素不属于用户,则为 0。

    NiUserTracker 源中提供了此示例的用法(这是它们为用户着色与背景不同的方式),请参阅 OpenNI\Samples\NiUserTracker 中的源(SceneDrawer.cpp 很有趣)。

于 2012-03-03T20:30:01.797 回答
0
  1. RGB 值来自相机图像数据。
    这只是一个 640x480 的 RGB 值数组。
    因此,要获得 300,200 的 RGB 值,只需从相机图像中读取 [300,200] 的值。
  2. 不幸的是,blob 数据属于点云领域,因此相机和 OpenNI 将不包含任何函数来查找此数据。
    我建议在这里查看点云库来帮助你。
    ( http://pointclouds.org/ )
    玩得开心。
于 2011-07-25T02:10:20.723 回答