2016-08-16 48 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