c++ - cvQueryFrame 是否预先有帧缓冲区?

标签 c++ c opencv

如果我这样做:

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 只是调用其他 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 内部存储系统的一部分,如果你用它做任何有趣的事情,你应该复制一份。我不知道你是否已经这样做了,但我一开始肯定做错了。

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

相关文章:

c++ - 从模板函数返回多个值作为 std::tuple

c++ - 错误 : cannot convert ‘<lambda(double)>’ to ‘double (*)(double)’

c - 快速整数标准偏差?

c++ - 使用 memcpy 尝试将一个结构复制到 char[] 缓冲区中

c - 跨内核的纳秒计时?

python-3.x - 如何使用cv2使用python3提高图像回放的速度

c++ - wxtooltip wxwidgets

c++ - 使用 try/catch 处理字符串流错误

c - 我的 Opencv 应用程序处理速度非常慢

python - 试图将视频保存到文件夹中,但它显示 0 KB。问题是什么?