Python - OpenCV VideoCapture = False(Windows)

问题描述 投票:3回答:3

我有一段简单的代码,用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)
python windows python-2.7 opencv
3个回答
1
投票

如果您使用的是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()

0
投票

由于您的代码在Mac上没有显示任何问题,请尝试在Windows系统上使用其他文件扩展名(例如mp4或wmv)进行测试。如果您的视频已加载,那意味着OpenCV已在Windows上正确配置,但显然没有驱动程序可以播放.mov文件


0
投票

试着用这个:

    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()
© www.soinside.com 2019 - 2024. All rights reserved.