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的负载,我建议给读入线程一些延迟,让他优先级低一点。

浙公网安备 33010602011771号