Je lis un fichier avi en utilisant python 2.7 et opencv2.4.J’utilise Windows 10. Mon exemple de code est
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()
Quand je lance la vidéo est affichée, mais le programme se termine sans erreur
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
Qu'est-ce que je fais mal? Comment puis-je le corriger?
Le problème est dans cette ligne:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
Cette ligne s'attend à ce que la trame soit un objet Mat à 3 ou 4 canaux, mais à la place elle a un mat vide et c'est pourquoi vous obtenez que cette assertion a échoué. Vous devez vérifier si le cadre existe en vidéo et gérer correctement la fin de la vidéo.
cap.isOpened()
vérifiera simplement si le fichier vidéo peut être ouvert en lecture, mais il ne renverra pas de faux lorsque la fin du fichier vidéo sera atteinte.
Essayez this
Vous avez pris le tutoriel d'ici: Lecture d'une vidéo à partir d'un fichier
Cette question concerne votre erreur: open cv error: (-215) scn == 3 || scn == 4 dans la fonction cvtColor
Deux choses peuvent fonctionner:
cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
Eh bien, je suppose que la capture n’est pas ouverte. C'est pourquoi votre programme se termine instantanément lorsque vous utilisez while(cap.isOpened()):
.
Comme indiqué dans ce document doc , il arrive que la capture ne soit pas implicitement ouverte lors de sa création.
Parfois, cap n'a peut-être pas initialisé la capture. Dans ce cas, ce code indique une erreur. Vous pouvez vérifier s'il est initialisé ou non par la méthode cap.isOpened (). Si c'est vrai, d'accord. Sinon, ouvrez-le avec cap.open ().
Essayez d'ouvrir explicitement la capture comme suit:
cap = cv2.VideoCapture('videos/wa.avi')
cap.open();
while(cap.isOpened()):
...
Si cela ne fonctionne pas, vous devrez vérifier le chemin du fichier vidéo.
Lorsque vous mettez cap.isOpened()
, vérifiez que la vidéo est lue correctement. La boucle while
ne fonctionne donc pas.
Mais lorsque vous passez à while True
, il s'exécutera sans une lecture correcte, c'est pourquoi il génère une erreur.
Assurez-vous que vous lisez correctement le fichier vidéo.