2016-08-16 76 views
2

嘗試使用C++度日的Kinect V2跟蹤的身體,但它不工作作爲它應該,而且微軟對C文檔++爲Kinect的V2 API是非常糟糕的Kinect體跟蹤GetAndRefreshBodyData返回錯誤

相關的代碼片段:

HRESULT result; 

if (BodyFrameReader != nullptr) 
{ 
    result = BodyFrameReader->AcquireLatestFrame(&BodyFrame); 
    if (result == S_OK) 
    { 
     IBody** bodies =nullptr; 

      result = BodyFrame->GetAndRefreshBodyData(BODY_COUNT, bodies); 


     if (result == S_OK) 
      Print("Success"); 
     else 
      Print("Fail "+result); 

     BodyFrame->Release(); 
    } 
} 

所以在閱讀使用AcquireLatestFrame回報S_OK然而試圖獲取信息使用GetAndRefreshBodyData始終任何跟蹤車身框架的第一個結果返回變量result的錯誤代碼是一些非常大的負數(-ve MAXINT _32)。

除了這個我注意到另一件事是在一些文檔就暗示,好像GetAndRefreshBodyData需要的IBody數組作爲參數現在IBody是一個接口,它不能因此如何是你應該做的實例。

Kinect->Open()之外,還有其他一些設置需要完成以便進行身體跟蹤嗎?

回答

4

你說得對,微軟的文檔非常糟糕。但是SDK附帶了不少示例項目,這總是一個很好的起點。對於你的情況,看看BodyBasics C++示例。你會發現如下代碼:

IBody* ppBodies[BODY_COUNT] = {0}; // BODY_COUNT is 6 
hr = pBodyFrame->GetAndRefreshBodyData(_countof(ppBodies), ppBodies); 
+0

這樣做,謝謝。大多數示例和在線文檔都關注C#,所以我忽略了這一點。 – Allahjane

+1

當您安裝Kinect SDK時,它還安裝了「SDK瀏覽器」。使用它,你可以過濾樣本,所以它只顯示你的C++的。 – HenningJ