我有一段简单的代码,用Python(版本2.7.11)编写,旨在对视频文件执行如下操作:
import cv2
cap = cv2.VideoCapture('MyVideo.mov')
print(cap)
print(cap.isOpened())
while(cap.isOpened()):
#Do some stuff
print(cap) 的结果是一个 8 位十六进制数字,所以我不知道这是否意味着视频已被找到。
但是,cap.isOpen() 的打印语句返回 False。我已经尝试了几个修复程序,但没有一个奏效。任何帮助或见解都将非常有帮助。
注意事项/我尝试过的事情
- 我正在运行Windows 8.1,Python 2.7.11和OpenCV 3.1.0
- 视频文件的位置与 Python 脚本位于同一目录中
我在我的 PATH 变量后附加了以下目录:
C:UsersMyNameOpenCV3opencvbuildx64vc14bin; C:UsersMyNameOpenCV3opencvsources3rdpartyffmpeg; C:Python27; C:Python27Scripts
我已经检查了我在OpenCV vc14 bin目录中是否有opencv_ffmpeg.dll
我已经检查过所述dll文件的标题为opencv_ffmpeg310_64.dll
我尝试重新下载所述dll文件,并将其重命名以包含OpenCV版本以及我的系统是64位系统的事实
我尝试将dll文件放在Python27目录中
上面的代码适用于 Mac,但不适用于 Windows(在 2 台不同的 Mac 上尝试了代码,它工作了,在 2 台不同的 Windows 机器上尝试了它,两次都返回了 false)
如果您使用的是 windows,则文件很可能位于 Users
或其他<something>
目录中。被 python 解释器视为 unicode 转义,之后的任何内容都可能是无效转义。尝试键入
r'<file path>'
以使路径被读取为原始文本并忽略 Unicode 转义。
尝试添加:
if(not cap.isOpened()):
cap.open(r'<file_path>')
如果问题是文件路径,则可能会导致错误。或者,您可以使用这样的循环:
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
#if frame can't be read
if ret==False:
print('end of input or incompatible video file')
break
cv2.imshow('frame',frame)
#if esc key pressed
if cv2.waitKey(1) & 0xFF == 27:
break
cv2.destroyAllWindows()
cap.release()
由于您的代码在 Mac 上没有显示任何问题,请尝试在 Windows 系统上使用其他文件扩展名(例如.mp4或 wmv)进行测试。如果您的视频已加载,则意味着OpenCV已在Windows上正确配置,但显然没有驱动程序可以播放.mov文件
尝试使用这个:
cam=cv2.VideoCapture('MyVideo.mov')
while(True):
ret, img = cam.read()
print ("frame", img)
if cv2.waitKey(100) & 0xFF == ord('q'):
break
cam.release()
cv2.destroyAllWindows()