如果我做:

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 有一些可以检索帧的缓冲区。

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

非常感谢

最佳答案

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

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

话虽如此,我将 cvQueryFrame 与典型的网络摄像头一起使用,并且每秒获得数十帧没有问题。滞后的部分实际上是否在您的 funcA() 调用中?编辑:从您代码中的注释中,我看到 funcA() 确实是缓慢的部分。如果执行需要半秒,你只会每半秒从 cvQUeryFrame 得到一个新帧,就像你描述的那样。尝试使 funcA 更快,或者将其放在单独的线程中。

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

关于c++ - cvQueryFrame 提前有帧缓冲吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7248058/

10-09 04:15