2017-01-03 98 views
1

如何讀取視頻文件,我讀AVI文件usinh蟒蛇2.7和opencv2.4.I正在使用Windows 10.My示例代碼使用python和opencv的

import numpy as np 
import cv2 
cap = cv2.VideoCapture('videos/wa.avi') 
while(cap.isOpened()): 
    ret, frame = cap.read() 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    cv2.imshow('frame',gray) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
    break 

cap.release() 
cv2.destroyAllWindows() 

當我運行視頻顯示,但該程序沒有錯誤

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file ..\..\..\..\opencv\modules\highgui\src\window.cpp, line 261 
Traceback (most recent call last): 
File "C:/Users/Emmanu/PycharmProjects/VideoEventDetection/test.py", line 11, in <module> 
cv2.imshow('frame',frame) 
cv2.error: ..\..\..\..\opencv\modules\highgui\src\window.cpp:261: error: (-215) size.width>0 && size.height>0 in function cv::imshow 

什麼我做錯結束?我如何糾正呢?

+0

我upvoted你的問題,因爲我覺得這個例子基本一樣強大。謝謝。 – MouIdri

回答

3

的問題是在這條線:

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

該行預計,框架是一個3通道或4通道墊目標,而是它有一些空墊,這就是爲什麼你收到此斷言失敗。 您需要檢查視頻中是否存在幀,並且需要正確處理視頻結尾。

cap.isOpened()只會檢查視頻文件是否可以打開進行讀取,但是到達視頻文件結束時不會返回false。

嘗試this

+0

文件無法打開。 opencv版本3.0.0測試版。有什麼建議麼? –

0

當你把cap.isOpened()它檢查視頻是否正確讀取,所以while循環不在那裏工作。

但是,當你改變爲while True它會執行沒有正確的閱讀,這就是爲什麼它是一個錯誤。

Make sure than you are properly reading the video file.

+0

你是對的,視頻有問題。當我改變視頻並用'cap.isOpened()'運行它。視頻顯示了感謝,但程序結束了一個錯誤。我已更新問題 – user6745741

0

嗯,我猜捕獲未打開。這就是爲什麼當你使用while(cap.isOpened()):時你的程序立即結束。

正如此doc所述,捕獲在創建時並未隱式打開。

Sometimes, cap may not have initialized the capture. In that case, this code shows error. You can check whether it is initialized or not by the method cap.isOpened(). If it is True, OK. Otherwise open it using cap.open().

嘗試顯式打開捕獲像這樣:

cap = cv2.VideoCapture('videos/wa.avi') 
cap.open(); 
while(cap.isOpened()): 
... 

如果不工作,你將不得不檢查視頻文件的路徑。

+0

是的,視頻文件出現問題。我更新了問題 – user6745741