2017-01-03 43 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