来自IP摄像机的cv2.VideoCapture()。read()会导致帧速率不稳定

时间:2018-01-25 19:05:40

标签: python-3.x opencv

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

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

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

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)

问题是,在查看保存的图像时,帧之间会有跳跃。看起来程序会快速连续拍摄几张图像,停止录制一两秒钟,然后快速连续拍摄并再抓取几张图像。控制台永远不会打印#Frame; Frame Dropped"所以我认为这不是摄像机端的问题。这里出了什么问题,有没有办法以这种方式获得平滑,恒定的帧率?提前谢谢。

1 个答案:

答案 0 :(得分:0)

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