如何使用python和opencv在实时流中获取当前帧?

时间:2018-07-05 07:03:38

标签: python opencv

我正在执行一些实时计算机视觉工作,例如实时流检测。

检测部分大约需要0.3s /帧。 但是视频的FPS较高,可能为15或30 FPS。

所以,在我现在的工作中,我使用

cap = cv2.VideoCapture("rtsp url")
ret, frame = cap.read()

获取第一帧,然后在检测过程之后,获取新帧并进行检测。

但是检测过程大约需要0.3s,

那么完成检测(0.3s)后如何获得当前帧?

不是刚检测到帧。

1 个答案:

答案 0 :(得分:0)

您好,先生,我了解您的问题,可以解释如下。

  1. 打开视频链接(速度为15帧或30帧)
  2. 读取最后一帧(X)并保存到当前帧
  3. 将当前帧(X)发送到检测过程
  4. 保持阅读,使当前帧变为(X + t)(t> 1)
  5. 检测过程完成后,发送当前帧(X + t)

我认为您的问题是,当前检测过程正在阻止您的主要过程。这使得当前帧不是(X + t)而是(X + 1)。

所以您在这里有2个选择:

  1. 将视频捕获过程和检测过程分开,这样每个过程都可以运行而不会互相阻塞。这个很辛苦
  2. 请勿将视频捕获过程和检测过程分开。而是设置下一个阅读框的位置。这很容易。视频文件位于:https://docs.opencv.org/3.1.0/d8/dfe/classcv_1_1VideoCapture.html#a8c6d8c2d37505b5ca61ffd4bb54e9a7c

    1. 计算下一帧位置

      t = ....

    2. 设置框架位置

    cap.set(cv2.CAP_PROP_POS_FRAMES,t)

    1. 然后阅读

    ret,frame = cap.read()

希望有帮助