Python中使用OpenCV读取视频文件非常慢
我正在用Python和OpenCV做一些视频处理,但速度非常慢。比如说,简单地读取和显示所有帧的速度大约只有1帧每秒:
import cv2
cap = cv2.VideoCapture("out1.avi")
cv2.namedWindow("input")
while(True):
f, img = cap.read()
cv2.imshow("input", img)
cv2.waitKey(1)
而同样的视频文件在C++中处理时没有任何问题,速度能达到30帧每秒。有人知道为什么Python版本这么慢吗?
还有一个有趣的事情是,Python版本无法显示.wmv文件,而C++版本可以处理这些文件(在我的Python中只能打开原始视频)。
我使用的是OpenCV 2.3.1和Python 2.7
谢谢大家的帮助!
3 个回答
0
这篇文章 “在Python中快速读取视频” 提到,OpenCV在快速读取视频方面并没有经过优化,并且还对比了其他一些库。
你可以在 这里 找到基准测试的代码。你可以在自己的视频上运行这个代码。测试结果可能会受到视频分辨率、编码格式、你的硬件等因素的影响。
看起来 Decord
这个库在大多数情况下表现得最好。
0
试着把cv2.waitKey(1)中的“1”改成一个更大的数字,比如cv2.waitKey(30)。
2
这段代码在我的电脑上运行得很正常(速度也很快),我的环境是opencv 2.3.0和python 2.6.4,系统是win7-64,播放的是未压缩的avi文件。
你有没有试过用旧版的python接口(用cv而不是cv2)来测试性能?
关于.wmv格式的视频播放,使用python接口(特别是ffmpeg)时有点问题,它只能播放未压缩的.avi文件,其他格式的播放就不行。