首页 >后端开发 >C++ >为什么我的 OpenCV VideoCapture 滞后,如何修复?

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-05 17:40:02930浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn