Kinect Body 跟踪 GetAndRefreshBodyData returns 错误

Kinect Body Tracking GetAndRefreshBodyData returns error

尝试使用 C++ 使 Kinect V2 跟踪 body,但它没有按预期工作,另外微软关于 kinect V2 的 C++ API 的文档非常差

相关代码片段:

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 returns S_OK 读取帧的第一个结果但是尝试始终使用 GetAndRefreshBodyData 获取任何跟踪的 body 的信息 returns 变量 result 中的错误代码,它是一些非常大的负数 (-ve MAXINT_32) .

除此之外我注意到的另一件事是在一些文档中它暗示好像 GetAndRefreshBodyData 需要一个 IBody 的数组作为参数现在 IBody 是一个接口并且它无法实例化,所以你应该怎么做。

除了 Kinect->Open() 之外,是否还需要进行一些额外的设置才能进行 body 跟踪?

你是对的,微软的文档很糟糕。但是 SDK 附带了相当多的示例项目,它们始终是一个很好的起点。对于您的情况,请查看 BodyBasics C++ 示例。在那里您会找到如下代码:

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