繁体   English   中英

Python - OpenCV VideoCapture = False(Windows)

[英]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。 我尝试了几个修复,但没有一个工作。 任何帮助或见解都会非常有帮助。

需要注意的事项/我尝试过的事情

  • 我正在运行Windows 8.1,Python 2.7.11和OpenCV 3.1.0
  • 视频文件的位置与Python脚本位于同一目录中
  • 我有以下目录附加到我的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM