Así que seguí este tutorial pero no parece hacer nada. Simplemente nada. Espera unos segundos y cierra el programa. ¿Qué está mal con este código?
import cv2
vidcap = cv2.VideoCapture('Compton.mp4')
success,image = vidcap.read()
count = 0
success = True
while success:
success,image = vidcap.read()
cv2.imwrite("frame%d.jpg" % count, image) # save frame as JPEG file
if cv2.waitKey(10) == 27: # exit if Escape is hit
break
count += 1
Además, en los comentarios dice que esto limita los fotogramas a 1000? ¿Por qué?
EDITAR: Intenté hacerlo success = True
primero pero eso no ayudó. Solo creó una imagen de 0 bytes.
python
python-2.7
opencv
Conmocionado
fuente
fuente
success
?True
oFalse
?print success
lugar.success
; si es falso, significa que la lectura del video ha fallado por alguna razón. Primero necesitas hacer funcionar esa parte.brew install opencv --python27 --ffmpeg
si está utilizando una versión diferente de Python, deberá cambiarla a su versión.Respuestas:
Desde aquí descargue este video para que tengamos el mismo archivo de video para la prueba. Asegúrese de tener ese archivo mp4 en el mismo directorio de su código Python. Luego, también asegúrese de ejecutar el intérprete de Python desde el mismo directorio.
Luego modifique el código, descarte
waitKey
que está perdiendo el tiempo y sin una ventana no puede capturar los eventos del teclado. También imprimimos elsuccess
valor para asegurarnos de que está leyendo los marcos correctamente.¿Cómo va eso?
fuente
Read a new frame: False
Para ampliar esta pregunta (y la respuesta de @ user2700065) para casos ligeramente diferentes, si alguien no quiere extraer cada fotograma, pero quiere extraer el fotograma cada segundo. Entonces, un video de 1 minuto dará 60 cuadros (imágenes).
fuente
opencv-2.4.9
, así que en lugar decv2.CAP_PROP_POS_MSEC
tener que usarcv2.cv.CAP_PROP_POS_MSEC
count = count + 5
cv2.imwrite()
al principio del ciclo ya que llamócv2.imread()
antes del ciclo?Este es un ajuste de la respuesta anterior para python 3.x de @GShocked, lo publicaría en el comentario, pero no tengo suficiente reputación
fuente
Esta es la función que convertirá la mayoría de los formatos de video a la cantidad de cuadros que hay en el video. Funciona
Python3
conOpenCV 3+
Es compatible con
.mts
archivos normales como.mp4
y.avi
. Probado y probado en.mts
archivos. Funciona de maravilla.fuente
Después de mucha investigación sobre cómo convertir cuadros en video, he creado esta función, espero que esto ayude. Requerimos opencv para esto:
cambie el valor de fps (fotogramas por segundo), la ruta de la carpeta de entrada y la ruta de la carpeta de salida de acuerdo con sus propias ubicaciones locales
fuente
Las respuestas anteriores han perdido el primer cuadro. Y será bueno almacenar las imágenes en una carpeta.
Por cierto, puede comprobar la tasa de fotogramas por VLC. Vaya a Windows -> información multimedia -> detalles del códec
fuente
cv.CAP_PROP_POS_AVI_RATIO
, pero no sé cómo. tnxEste código extrae fotogramas del video y guarda los fotogramas en formato .jpg
fuente
Estoy usando Python a través del software Spyder de Anaconda. Usando el código original enumerado en la pregunta de este hilo por @Gshocked, el código no funciona (Python no leerá el archivo mp4). Así que descargué OpenCV 3.2 y copié "opencv_ffmpeg320.dll" y "opencv_ffmpeg320_64.dll" de la carpeta "bin". Pegué ambos archivos dll en la carpeta "Dlls" de Anaconda.
Anaconda también tiene una carpeta "pckgs" ... Copié y pegué toda la carpeta "OpenCV 3.2" que descargué en la carpeta "pckgs" de Anaconda.
Finalmente, Anaconda tiene una carpeta "Biblioteca" que tiene una subcarpeta "bin". Pegué los archivos "opencv_ffmpeg320.dll" y "opencv_ffmpeg320_64.dll" en esa carpeta.
Después de cerrar y reiniciar Spyder, el código funcionó. No estoy seguro de cuál de los tres métodos funcionó, y soy demasiado vago para volver atrás y resolverlo. Pero funciona así, ¡salud!
fuente
Esta función extrae imágenes de video con 1 fps, ADEMÁS identifica el último cuadro y deja de leer también:
fuente
El siguiente script extraerá fotogramas cada medio segundo de todos los videos en la carpeta. (Funciona en Python 3.7)
fuente