[英]VideoCapture always returns False in Python OPENCV [Linux]
[英]Python - OpenCV VideoCapture = False (Windows)
我有一段简单的代码,用Python(2.7.11版)编写,旨在为视频文件做一些事情,如下所示:
import cv2
cap = cv2.VideoCapture('MyVideo.mov')
print(cap)
print(cap.isOpened())
while(cap.isOpened()):
#Do some stuff
打印(上限)的结果是一个8位十六进制数字,所以我不知道这是否意味着已找到视频。
但是,cap.isOpened()的print语句返回False。 我尝试了几个修复,但没有一个工作。 任何帮助或见解都会非常有帮助。
需要注意的事项/我尝试过的事情
我有以下目录附加到我的PATH变量:
C:\\Users\\MyName\\OpenCV3\\opencv\\build\\x64\\vc14\\bin; C:\\Users\\MyName\\OpenCV3\\opencv\\sources\\3rdparty\\ffmpeg; C:\\Python27\\; C:\\Python27\\Scripts
我已经检查过我在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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.