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

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()

相关内容

最新更新