2011-03-26 31 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很有趣)中的源代碼。