首页 > 后端开发 > C++ > 正文

为什么我的 OpenCV VideoCapture 滞后,如何修复?

Mary-Kate Olsen
发布: 2024-11-05 17:40:02
原创
828 人浏览过

Why is My OpenCV VideoCapture Lagging, and How Can I Fix It?

由于捕获缓冲区导致 OpenCV VideoCapture 延迟

由于捕获缓冲区,通过网络摄像头捕获视频可能会出现延迟,其中帧在读取之前被存储。当读取帧的速率低于捕获帧的速率时,就会出现此问题,从而导致缓冲区中的帧累积。

OpenCV 解决方案

在 OpenCV 中,您可以使用 CV_CAP_PROP_BUFFERSIZE 设置 VideoCapture 对象的缓冲区大小:

<code class="cpp">cv::VideoCapture cap;
cap.set(CV_CAP_PROP_BUFFERSIZE, 3); // Store only 3 frames in the buffer</code>
登录后复制

Hackaround 1

如果 OpenCV 解决方案没有不起作用,您可以使用以下技巧:

  1. 测量从缓冲区查询帧所需的时间。
  2. 如果时间很短,则按原样丢弃该帧从缓冲区读取。
  3. 继续查询帧,直到时间超过限制,表示缓冲区为空,下一帧是最新的。

Hackaround 2

另一种破解方法涉及使用第三个线程高速连续抓取帧以保持缓冲区为空:

  1. 创建第三个线程调用 cv:: VideoCapture.grab() 获取帧。
  2. 使用自旋锁在工作线程和第三线程之间同步读取帧。

以上是为什么我的 OpenCV VideoCapture 滞后,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板