获取StickFigure的RGB值和blob数据

时间:2011-03-26 16:55:39

标签: kinect

我正在使用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);
  2. 现在我需要帮助以下两个::

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

    2. 如何获取与StickFigure边界相关的数据,当我的意思是边界时,我指的是blob数据或与人物的肉体/轮廓部分相关的数据认可?

    3. 我们非常感谢任何建议或解决方案。

      thankyou

2 个答案:

答案 0 :(得分:0)

  1. RGB值来自相机图像数据 这只是一个640x480的RGB值数组 因此,要将RGB值设置为300,200,只需在[300,200]处读取摄像机图像中的值。
  2. 不幸的是,blob数据属于点云领域,因此摄像头和OpenNI不会包含任何查找此数据的功能。
    我建议看看点云库来帮助你。
    http://pointclouds.org/
    玩得开心。

答案 1 :(得分:0)

  1. xnConvertRealWorldToProjective(depthGenerator.ConvertRealWorldToProjective with C ++ wrapper)会将世界空间中的一个点(就像从骨架中得到的那样)转换回深度图中的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很有趣)的来源。