Cómo leer archivos de video usando Python y Opencv

Estoy leyendo un archivo avi, usinh python 2.7 y opencv2.4. Estoy usando windows 10.Mi código de ejemplo es

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() 

Cuando ejecuto el video se muestra, pero el progtwig termina sin error.

 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  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é estoy haciendo mal? ¿Cómo puedo corregirlo?

El problema está en esta línea:

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

Esta línea espera que el cuadro sea un objeto Mat de 3 canales o 4 canales, pero en lugar de eso, tiene un tapete vacío y por eso está fallando esta afirmación. Debe comprobar si el fotogtwig existe en el video y debe manejar el final del video correctamente.

cap.isOpened() solo comprobará si el archivo de video se puede abrir para leerlo, pero no devolverá un falso cuando se llegue al final del archivo de video.

Prueba esto

Cuando pones cap.isOpened() verifica que el video se lea correctamente, por lo que el ciclo while no funciona allí.

Pero cuando cambia a while True , se ejecutará sin una lectura adecuada, por eso es que está dando un error.

Asegúrese de que está leyendo correctamente el archivo de vídeo.

Tomaste el tutorial desde aquí: Reproducción de video desde archivo

Esta pregunta resuelve su error: abrir error cv: (-215) scn == 3 || scn == 4 en la función cvtColor

Dos cosas pueden funcionar:

  • Asegúrese de que el video se encuentra!
  • Y trata de usar cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

Bueno, supongo que la captura no está abierta. Es por eso que su progtwig termina instantáneamente cuando usa while(cap.isOpened()):

Como se indica en este documento , sucede que la captura no se abre implícitamente cuando se crea.

A veces, la tapa puede no haber inicializado la captura. En ese caso, este código muestra error. Puede verificar si está inicializado o no por el método cap.isOpened (). Si es verdad, está bien. De lo contrario, ábralo usando cap.open ().

Trate de abrir explícitamente la captura de esta manera:

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

Si esto no funciona, tendrá que verificar la ruta del archivo de video.