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的负载,我建议给读入线程一些延迟,让他优先级低一点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理