我正在尝试使用OpenCV加载视频文件或从网络摄像头访问视频流,但是我无法访问所有帧。
视频文件以60的FPS捕获,但是在我的代码中,我每秒只能访问几帧。我尝试使用OpenCV的线程版本imutils
。它效果更好,但我仍然无法访问完整的帧。
在下面的代码中,我使用线程版本的视频阅读器加载视频文件,并将其调整为较小的尺寸,以降低所需的处理能力。
成功抓取框架后,我将进行一些图像处理工作(以后)。但是现在即使有了这个样板,我最多只能读取几(10+)帧,结果令人吃惊。有办法解决这个问题吗?
import cv2
from imutils import resize
from imutils.video import VideoStream
vs = VideoStream(src="./video.MOV").start()
while True:
frame = vs.read()
if frame is not None:
frame = resize(frame, 800)
# some heavy analytics work
cv2.imshow("Frame", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cv2.destroyAllWindows()
vs.stop()
实验
我进行了一项实验,以计算iMac和将1080p显示器的Intel Core i5-7400 @ 3.00Ghz摇动的Ubuntu计算机上每个imshow
功能的加载帧数和平均时间。
视频(h264)的持续时间为1:03分钟,大小为185.7MB。
iMac最多只能加载414帧,而Ubuntu机器最多可以加载2826帧。
两台机器的imshow
功能平均花费的时间为0.0003s
答案 0 :(得分:-2)
基本上,您只是加载视频并进行显示,因此除了使用带有Retina屏幕的Macbook之外,没有其他原因会导致fps降低。也许这是导致视频显示缓慢的原因,因为Retina屏幕的像素更多,并且合成引擎可能需要一些时间才能在屏幕上渲染图像。我建议使用外部屏幕。