![](/img/trans.png)
[英]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.