【问题标题】:OpenCV 4.1.1.26 reports 90000.0 fps for a 25fps RTSP streamOpenCV 4.1.1.26 报告 90000.0 fps 的 25fps RTSP 流
【发布时间】:2019-10-27 22:13:19
【问题描述】:

我有一个以 25fps 运行的 RTP/RTSP 流,经 ffprobe -i <URI> 验证。此外,VLC 以实时速率播放 RTSP 流,但在 媒体信息 窗口中没有显示 FPS。

但是,当我使用 OpenCV 4.1.1.26 检索输入流的帧速率时,它给了我90000.0 的响应。

问题:如何使用 OpenCV 探测 RTSP 流的正确帧速率?什么会导致它报告90000.0 而不是25

这是我检索帧速率的 Python 函数:

import cv2
vid : cv2.VideoCapture = cv2.VideoCapture('rtsp://192.168.1.10/cam1/mpeg4')

def get_framerate(video: cv2.VideoCapture):
    fps = video.get(cv2.CAP_PROP_FPS)
    print('FPS is {0}'.format(fps))

get_framerate(vid)
  • MacOS Catalina
  • Python 3.7.4

【问题讨论】:

    标签: opencv


    【解决方案1】:

    我希望这对您有所帮助。它是一个简单的计算器,以cont 捕获并测量开始和结束时间。然后根据三规则,我将其转换为fps

    与您有关的第二个问题我读过here,这可能是由于安装不当造成的。此外,您可以通过打印ret 变量来检查您的相机是否正常工作。如果是true,那么你应该可以看到fps,如果是false,那么你会得到一个不可预知的结果。

    cv2.imshow()key = cv2.waitKey(1) 应该被注释掉,因为它会增加 ping/延迟,从而导致错误的测量。


    我将此作为评论发布,因为我没有足够的声望点。

    img = cv2.VideoCapture('rtsp://192.168.1.10/cam1/mpeg4')
    
    while True:
    
        if cont == 50:
            a = datetime.now() - start 
            b = (a.seconds * 10e6 + a.microseconds)
            print((a.seconds * 10e6 + a.microseconds), "fps = ", (50 * 10e6)/ b)
            break
    
    
        ret, frame = img.read()
    
        # Comment for best test
        cv2.imshow('fer', frame)
        key = cv2.waitKey(1)
    
        if key == ord('q'):
            break
    
        cont+=1
    
    img.release()
    cv2.destroyAllWindows()`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 2017-09-30
      • 1970-01-01
      相关资源
      最近更新 更多