Python中使用OpenCV读取视频文件非常慢

6 投票
3 回答
10307 浏览
提问于 2025-04-17 07:05

我正在用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文件,其他格式的播放就不行。

撰写回答