opencv的调用cap视频延迟的问题

在调用opencv自带的cap时,发现视频并非实时,延迟了1s左右的时间。

对于辅助驾驶的高实时性而言,延迟1s是灾难性的,是无法容忍的。

因此,我审视了自己写的代码。

cv::VideoCapture cap(0);
...
while(...)
{
cap >> img;
...
}

结果发现并没有问题。

于是我仔细的思考了一下,这可能是由于捕获缓冲区的问题。

OpenCV VideoCapture由于捕获缓冲区而延迟 - 主函数编程网 (main.net.cn)

因为opencv的cap维护了一个历史队列,队列中包含了定长度的视频数据,用输入输出流读取的时候只会读取队首信息,也就是最老的视频数据。

那么该如何读取最新的实时视频呢?我试了一下,无论是调节CV_CAP_PROP_BUFFERSIZE还是更改CV_FOURCC,都不可以。

api没办法实现的话,就只有开线程,一个线程实时读入,另一个线程处理数据。结果毫无疑问的解决了该问题,不过加大了cpu的负载,我建议给读入线程一些延迟,让他优先级低一点。

 

posted @   澳大利亚树袋熊  阅读(888)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示