Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python和opencv在实时流中获取当前帧?_Python_Opencv - Fatal编程技术网

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

如何使用python和opencv在实时流中获取当前帧?,python,opencv,Python,Opencv,我正在做一些实时的计算机视觉工作,比如实时流检测 检测部分约为0.3s/帧。 但视频的每秒帧数更高,可能是15或30帧 所以,在我现在的工作中,我使用 cap = cv2.VideoCapture("rtsp url") ret, frame = cap.read() 为了获得第一帧,然后在检测过程之后,我将获得新帧并进行检测 但检测过程大约需要0.3秒 那么,在我完成检测(0.3s)之后,如何获得当前帧呢 不是我刚检测到的帧。您好,先生,据我所知,您的问题可以解释如下 打开视频链接(每秒15

我正在做一些实时的计算机视觉工作,比如实时流检测

检测部分约为0.3s/帧。 但视频的每秒帧数更高,可能是15或30帧

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

cap = cv2.VideoCapture("rtsp url")
ret, frame = cap.read()
为了获得第一帧,然后在检测过程之后,我将获得新帧并进行检测

但检测过程大约需要0.3秒

那么,在我完成检测(0.3s)之后,如何获得当前帧呢


不是我刚检测到的帧。

您好,先生,据我所知,您的问题可以解释如下

  • 打开视频链接(每秒15帧或30帧)
  • 读取最后一帧(X)并保存到当前帧
  • 将当前帧(X)发送到检测进程
  • 保持读取,使当前帧变为(X+t)(t>1)
  • 检测过程完成后,发送当前帧(X+t)
  • 我认为你的问题是,目前,检测过程正在阻碍你的主要进程。这使得当前帧不是(X+t),而是(X+1)

    因此,这里有两个选项:

  • 将视频捕获过程和检测过程分开,这样每个过程都可以在不相互阻塞的情况下运行。这个很难
  • 不要将视频捕获过程和检测过程分开。而是设置下一个阅读框的位置。这很容易。视频文件位于:

  • 计算下一帧位置

    t=

  • 设置帧位置

  • 盖组件(cv2.cap\u PROP\u POS\u FRAMES,t)

  • 然后读
  • ret,frame=cap.read()


    希望帮助

    您可以尝试等待捕获帧的线程0.3秒,然后在0.3秒后再次启动。假设您的应用程序是多线程的,您得到的是当前帧,不是吗
    VideoCapture
    不会将图像存储在任何位置,因此您可以在检测完成后访问它们
    VideoCapture
    正在读取读取时写入URL中指定端口的数据。