OpenCV在Python中读取视频文件速度非常慢

6

我正在尝试在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 fps的速度渲染,没有任何问题。有什么想法可以解释Python版本为什么这么慢吗?

还有一件有趣的事情是关于Python版本的:它不能显示.wmv文件,而C++版本可以处理(因为我的Python只能打开原始视频)。

我使用的是OpenCV 2.3.1和Python 2.7。

感谢您的帮助!


你在做什么与 f - karlphillip
我检查了是否为最后一帧,但为简化代码已删除了一些内容,这并没有改变性能。 - Akson
3个回答

2

这段代码在我的电脑上正常运行(使用opencv 2.3.0和python 2.6.4,运行未压缩的avi文件)并且速度较快。

你尝试过使用旧版本的python接口(cv而不是cv2)来测试性能吗?

关于.wmv视频播放,它在python接口(或者具体点说是ffmpeg)上存在问题,无法播放除未压缩.avi文件之外的其他格式。


谢谢您的回复。看起来我的电脑或其他什么东西出了问题,昨天我尝试了两种包装器,但在这两种情况下都运行缓慢,但今天它已经开始快速运行。所以问题解决了。 - Akson

0

尝试将cv2.waitKey(1)中的“1”更改为较高的值,例如cv2.waitKey(30)


0

"Python中闪电般快速的视频读取"文章指出OpenCV没有针对快速视频读取进行优化,并比较了其他库。

基准代码在这里。您可以在您的视频上运行它。结果可能取决于视频分辨率、编解码器、硬件等因素。

Decord库在大多数情况下似乎获胜。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接