2011-03-26 32 views
2
我使用OPENNI和NITE

,我试图让3种由PrimeSense的提供的StickFigure样本信息的,获取RGB值和BLOB数据StickFigure

  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数据或与人的肉身/轮廓部分相关的数据, ?

任何建议或解决方案,高度赞赏。

三江源

回答

0
  1. RGB值来自照相机的图像数据。
    这只是一个640x480的RGB值数组。
    因此,要获得300,200的RGB值,只需从[300,200]处的相机图像中读取值。
  2. 不幸的是,blob数据处于点云领域,所以相机和OpenNI将不包含任何函数来查找这些数据。
    我会建议看点云库来帮助你在这里。
    http://pointclouds.org/
    玩得开心。
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很有趣)中的源代码。