我很难理解当kinect与慢速计算机一起使用时会发生什么,或者需要进行大量的逐帧计算。
让我们考虑C# sample code来恢复深度。
运行时动态由DepthFrameReady
事件驱动。在触发此类事件时,将调用此处报告的函数DepthImageReady
。
private void DepthImageReady(object sender, DepthImageFrameReadyEventArgs e)
{
using (DepthImageFrame depthFrame = e.OpenDepthImageFrame())
{
if (depthFrame != null)
{
depthFrame.CopyDepthImagePixelDataTo(this.depthPixels);
//MY OPERATIONS BLABLABLA...
}
else
{
// depthFrame is null because the request did not arrive in time
}
}
}
我的互相关问题是:
depthFrame
怎么可能Null
? 任何帮助表示感谢。
答案 0 :(得分:1)
根据这里的教程:
根据该教程,每个帧都会触发事件(即在事件队列中排队),但是如果处理前一帧的时间过长,您会发现在处理下一帧时OpenDepthImageFrame()
方法将返回null
,表示帧数据不再可用。
答案 1 :(得分:0)
我认为机制是它只是一个缓冲区 当有数据时,会引发事件(图像检索的开始)。 由于数据未存储(它没有排队),因此每次启动的新线程都会再次擦除和写入数据。所以有检查!= null
他们可能在后台提升线程,指针指向新的缓冲区,然后通过更改缓冲区指针(一个新的帧加载完成),它们只交换指针,有效地导致旧线程的空指针新线程具有新数据时的旧数据(只要该线程处于活动状态,数据就会保留)。但已经排队的线程然后不包含数据(指针被交换),所以对你的应用程序然后胎面队列不会累积。和旧线程图像数据也不会排队。
这就是我认为它的工作方式,但我没有源代码,没有人拥有。