cvQueryFrame是否提前为帧设置了缓冲区?

Does cvQueryFrame have buffer for frames in advance?

本文关键字:设置 缓冲区 是否 cvQueryFrame      更新时间:2023-10-16

如果我这样做了:

while(1) { 
   //retrieve image from the camera
   webCamImage=cvQueryFrame(camera) // where 'camera' is cvCreateCameraCapture(0)
   //do some heavy processing on the image that may take around half a second
   funcA()
}

现在,当我去连续迭代,它似乎webCamImage滞后!

即使我移动相机,webCamImage也需要很长时间才能更新到新的视场,并且它会继续显示和处理以前的视场相机帧。

我假设cvQuery有一些检索帧的缓冲区。

你能告诉我如何在每次迭代中获得更新的相机视图吗?

多谢

cvQueryFrame只是一个调用其他2个函数的包装器:cvGrabFrame,它从相机中非常快速地获取数据,cvRetrieveFrame,它解压缩该数据并将其放入IplImage。如果您需要立即捕获帧,只需捕获帧,并检索它以供稍后处理。

参见http://opencv.jp/opencv-1.0.0_org/docs/ref/opencvref_highgui.htm FMI

话虽如此,但我在典型的网络摄像头上使用cvQueryFrame,我可以毫不费力地获得每秒几十帧的图像。是否有可能滞后的部分实际上在您的funcA()调用中?编辑:从你的代码中的评论,我看到funcA()确实是慢的部分。如果执行时间为半秒,则每半秒只能从cvQUeryFrame获得一个新帧,正如您所描述的那样。试着让funcA更快,或者把它放在一个单独的线程。

,友情提醒,cvQueryFrame/cvRetrieveFrame返回的IplImage不能被用户修改或删除;它是OpenCV存储东西的内部系统的一部分,如果你想用它做任何有趣的事情,你应该做一个拷贝。我不知道你是否已经这样做了,但我一开始肯定做错了。