我有一个函数在来自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"所以我认为这不是摄像机端的问题。这里出了什么问题,有没有办法以这种方式获得平滑,恒定的帧率?提前谢谢。
答案 0 :(得分:0)
您可能想要打开一个新线程来处理相机帧并处理主线程上的图像,这将为您提供更好的FPS。