gpt4 book ai didi

c++ - Kinect 2 - AcquireLatestFrame() 大部分时间都失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:15:19 24 4
gpt4 key购买 nike

下面给出了连续从 Kinect 2 获取最新帧的 C++ 代码。

int main()
{
setupKinect();
acquireFrames();
return 0;
}

template<class Interface>
inline static void safeRelease(Interface *&interfaceToRelease)
{
if (interfaceToRelease != nullptr) {
interfaceToRelease->Release();
interfaceToRelease = nullptr;
}
}

void acquireFrames() {
while (true) {
if (bodyFrameReader != nullptr) {
IBodyFrame* bodyFrame = nullptr;
HRESULT hr = bodyFrameReader->AcquireLatestFrame(&bodyFrame);
if (SUCCEEDED(hr)) {
// processing bodyFrame
} else {
// acquiring frame failed
}
safeRelease(bodyFrame);
}
}
}

void setupKinect() {
IKinectSensor * sensor = nullptr;
HRESULT hr = GetDefaultKinectSensor(&sensor);
if (SUCCEEDED(hr)) {
hr = sensor->Open();
if (SUCCEEDED(hr)) {
IBodyFrameSource* bodyFrameSource = nullptr;
hr = sensor->get_BodyFrameSource(&bodyFrameSource);
if (SUCCEEDED(hr)) {
hr = bodyFrameSource->OpenReader(&bodyFrameReader);

}
safeRelease(bodyFrameSource);
}
}
safeRelease(sensor);
}

为什么 AcquireLatestFrame 最常返回失败的 HRESULT?一些测试显示该函数每秒仅成功约 30 次,因此该函数似乎最多获取/返回一次特定帧(Kinect 帧率为 30 fps)。这是正确的吗?

最佳答案

是的,你是对的。

来源:请参阅此处表格中“深度感应”下的“30hz”:(您可能需要向下滚动一点)

https://developer.microsoft.com/en-us/windows/kinect/hardware

函数的文档说:

Return value

Type: HRESULT

Returns S_OK if successful; otherwise, returns a failure code.

(来源:https://msdn.microsoft.com/en-us/library/microsoft.kinect.kinect.ibodyframereader.acquirelatestframe.aspx)

它大部分时间返回的失败 HRESULT 代码是 E_PENDING。这意味着新框架尚未准备就绪。


回答您的问题:为什么 AcquireLatestFrame 最常返回失败的 HRESULT?

因为不需要多次处理相同的输入数据(您只会通过一遍又一遍地计算相同的结果来浪费 CPU 时间)。

关于c++ - Kinect 2 - AcquireLatestFrame() 大部分时间都失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39321263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com