【问题标题】:cv2.VideoCapture().read() from IP camera results in choppy framerate来自 IP 摄像机的 cv2.VideoCapture().read() 导致帧率不稳定
【发布时间】:2018-06-02 18:50:25
【问题描述】:

我有一个函数可以在来自 IP 摄像机的 RTSP 流上调用 cv2.VideoCapture:

vidcap = cv2.VideoCapture("rtsp://usr:passw@my_camera:1234/") 

然后从捕获的视频中获取帧,将它们转换为 jpeg 编码的字节数组,并通过生成器使它们可用:

if vidcap.isOpened():
    try:
        for x in iter(int, 1):
            ret, frame = vidcap.read()
            if ret:
                print("Read Frame")
            elif ret is False:
                print("Frame Dropped")
            converted = convert_image(frame, to_type=bytearray)
            yield converted

定期调用此生成器:

for image in generator():
    with open("/path/{}.jpg".format(datetime.datetime.now().strftime('%M-%S-%f')), 'wb') as f:
            f.write(image)
            f.close()
    time.sleep(0.3)

问题在于,在查看保存的图像时,帧之间存在跳转。看起来该程序将快速连续抓取几张图像,停止录制一两秒钟,然后快速恢复并快速连续抓取几张图像。控制台从不打印“丢帧”,所以我认为这在相机端不是问题。这里出了什么问题,有没有办法以这种方式获得平滑、恒定的帧速率?提前谢谢你。

【问题讨论】:

    标签: python-3.x opencv


    【解决方案1】:

    您可能希望打开一个新线程来处理相机帧并在主线程上处理图像,这将为您提供更好的 FPS。

    【讨论】:

      猜你喜欢
      • 2014-05-04
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      相关资源
      最近更新 更多