如何使用 opencv VideoCapture 方法获取实时帧?

Posted

技术标签:

【中文标题】如何使用 opencv VideoCapture 方法获取实时帧?【英文标题】:How to get realtime frames using opencv VideoCapture method? 【发布时间】:2021-12-28 23:45:30 【问题描述】:

我的 Opencv 是 4.5.4 版,使用 gstreamer lib 编译。

在我的情况下,我收到了流媒体视频的帧。流式视频时间和获取视频时间(cv2.VideoCapture)之间存在差距。如果通过流式传输下一个视频,cv2.VideoCapture 不会获得下一个流式视频的帧,因为 opencv 没有到达最后一帧。

我该如何解决? (当我使用opencv 3.4.0版本时,我没有遇到这个问题。)

我的代码(不使用多进程/线程)

def connect_streaming(rtsp_url):
    while True:
        video_cap = cv2.VideoCapture(rtsp_url, cv2.CAP_GSTREAMER)

        while video_cap.isOpened():
            ret, frame = video_cap.read()
            if not ret:
                video_cap.release()
                break
             ...

【问题讨论】:

您没有显示任何代码,因此很难看出会出现什么问题。也许您需要多线程或多进程? 如果它在以前的版本中工作,那么也许你应该把它作为问题发送给作者。 【参考方案1】:

我解决了。 我认为这是使用线程获取流视频帧的最佳方式。

我希望很多人,面临同样的问题,阅读后解决问题。

【讨论】:

以上是关于如何使用 opencv VideoCapture 方法获取实时帧?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上的 OpenCV 中旋转 VideoCapture

如何在opencv中计算每秒帧数?

OpenCV VideoCapture 有时会返回空白帧

OpenCV/Python:使用 VideoCapture 读取特定帧

洞察使用 python 和 OpenCV 与 VideoCapture 进行多网络摄像头捕获

使用 VideoCapture (OpenCV) 从图像创建视频