簡體   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