有耐心的小王
2017-12-22 04:03
采纳率: 25%
浏览 24.0k
已采纳

OpenCV的VideoCapture读取rtsp实时视频流,如何获取最新帧?

视频分析算法效率1帧/秒,所以我需要等算法完成后,再获得最新的一帧图像。
然而VideoCapture很“耿直”的一帧不落的输出帧,“等”我处理每一帧。
算法速度跟不上视频帧速,旧帧越积越多。不能实现处理最新帧的目的。
如何解决?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • 渺天客 2017-12-25 13:13
    已采纳

    楼主自己的回答思路正解,推荐http://download.csdn.net/download/masikkk/5218336 这里是你说法的实现。
    但是仍未解决及时抛去旧帧的,楼主可以增加一句,在新一帧进入缓存前,把队列清空,保证队列只有最新帧。

    6 打赏 评论
  • 王先生-北京SJ 2021-03-13 22:50

    这个问题我也是困扰了很久的,后来自己想了个办法解决了,很简单且效果不错,写出来供参考。

    因为读取缓存区的帧需要的时间很短,而视频的帧间隔时间应该大概是33ms(30fps)。需要读取新的帧的时候,设一个循环,不断读取视频流的新帧,计算每次读取新帧时消耗的时间。当读取新帧消耗的时间大于10ms时,读出来的就是最新的帧了。

    这个方法的优点是,处理图像的时间变化很大的时候,仍然可以及时获得最新的帧。

    1 打赏 评论
  • 有耐心的小王 2017-12-22 06:47

    自问自答,使用openmp分两个线程做,一个线程实时读取视频流到全局mat中,另一个线程拷贝全局mat进行处理。

    注意线程中操作mat部分加互斥锁。

    打赏 评论
  • csulizhang 2017-12-22 06:48

    看这样的思路行不行,通过时间戳来筛选,创建一个队列,把每一帧都入队,并且为每一帧记录一个时间戳,就从整数1.2.3这样排下去,取帧的时候,计算一下当前时间,结合帧率,根据时间戳把不要的帧全部出队丢掉,只留下时间戳正确的帧分析

    打赏 评论
  • 机器人coder进化论 2019-05-31 11:09

    python的可以看看,我这篇,主要思路和上边的同学差不多,就是自己做一个帧缓冲区,自己管理帧缓存,按时清除旧的帧就可以了。https://blog.csdn.net/weixin_43409627/article/details/89454885

    打赏 评论
  • 忙是一种病! 2019-07-22 11:41
    打赏 评论
  • xiaohouzi112233 2021-01-27 13:11

    可以设计一个变量i,每读一帧计数加一,当i/25==0才进入处理,也就是每25帧才取一帧进行处理,或者调整摄像头帧率慢一些

    打赏 评论
  • jl1110028 2021-06-24 19:23

    不是我说,提这种问题的人,太懒了

    3 打赏 评论

相关推荐 更多相似问题