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

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

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

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

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

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

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

不是刚检测到帧。

最佳答案

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

  • 打开视频链接(具有15 FPS或30 FPS)
  • 读取最后一帧(X)并保存到当前帧
  • 将当前帧(X)发送到检测过程oj​​it_rli
  • 继续阅读,使当前帧变为(X + t)(t> 1)
  • 检测过程完成后,发送当前帧(X + t)

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

    因此,您在这里有2个选项:
  • 将您的视频捕获过程和检测过程分开,这样每个过程都可以运行而不会互相阻塞。这个很辛苦
  • 不要将视频捕获过程和检测过程分开。而是设置下一个阅读框的位置。这很容易。视频文件位于:https://docs.opencv.org/3.1.0/d8/dfe/classcv_1_1VideoCapture.html#a8c6d8c2d37505b5ca61ffd4bb54e9a7c
  • 计算下一帧位置

    t = ....
  • 设置框架位置

  • cap.set(cv2.CAP_PROP_POS_FRAMES,t)
  • 然后阅读

  • ret,frame = cap.read()
    希望对您有所帮助

    10-02 10:36