gpt4 book ai didi

python - 使用opencv和python抓取帧时如何保持恒定的FPS?

转载 作者:太空宇宙 更新时间:2023-11-03 21:39:58 32 4
gpt4 key购买 nike

我正在使用 OpenCV4 和 python 3 打开网络摄像头,抓取帧并将它们显示在窗口中,就像提供的第一个代码教程一样 here .然而,抓取不同的帧需要不同的时间:有时需要 0.01 秒来抓取,有时需要 0.33 秒,这会在窗口中显示帧时产生滞后。

有没有办法在抓帧时强制固定时间,以便我可以无延迟地观看视频?我认为 OpenCV 会发生这种情况,因为当我使用默认的 Windows 摄像头查看器查看时它正常显示的视频。

我已经尝试过的是在再次抓取帧之前使用 time.sleep() 等待一段时间。但这没有帮助。

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
# Capture frame-by-frame
ret, frame = cap.read()

# Display the resulting frame
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

最佳答案

一种可能的方法是在循环内设置时间戳并跟踪显示最后一帧的时间。例如,只有经过一定的时间后才会显示框架。同时,您不断读取帧以保持缓冲区为空,以确保您拥有最新的帧。您不想使用 time.sleep(),因为它会卡住程序并且不会使缓冲区保持为空。一旦时间戳命中,您将显示帧并重置时间戳。

import cv2
import time

cap = cv2.VideoCapture(0)

# Timeout to display frames in seconds
# FPS = 1/TIMEOUT
# So 1/.025 = 40 FPS
TIMEOUT = .025
old_timestamp = time.time()

while(True):
# Capture frame-by-frame
ret, frame = cap.read()

if (time.time() - old_timestamp) > TIMEOUT:
# Display the resulting frame
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
old_timestamp = time.time()

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

关于python - 使用opencv和python抓取帧时如何保持恒定的FPS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56759785/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com