Estaba tratando de crear un video para mostrar la variación dinámica de los datos, como mostrar continuamente las imágenes una por una rápidamente, así que usé imágenes (las imágenes simplemente se llaman 1,2,3,4, .....) y escribió el siguiente código:
import cv2 import numpy as np img=[] for i in range(0,5): img.append(cv2.imread(str(i)+'.png')) height,width,layers=img[1].shape video=cv2.VideoWriter('video.avi',-1,1,(width,height)) for j in range(0,5): video.write(img) cv2.destroyAllWindows() video.release()y se planteó un error:
TypeError: image is not a numpy array, neither a scalarCreo que usé la lista de manera incorrecta, pero no estoy seguro. Entonces, ¿dónde hice mal?
Estás escribiendo toda la matriz de marcos. Intente guardar cuadro por cuadro en su lugar:
... for j in range(0,5): video.write(img[j]) ...Puede leer los cuadros y escribirlos en video en un bucle. A continuación se muestra su código con una pequeña modificación para eliminar uno for loop.
import cv2 import numpy as np # choose codec according to format needed fourcc = cv2.VideoWriter_fourcc(*'mp4v') video = cv2.VideoWriter('video.avi', fourcc, 1, (width, height)) for j in range(0,5): img = cv2.imread(str(i) + '.png') video.write(img) cv2.destroyAllWindows() video.release()Alternativamente, puede usar la biblioteca skvideo para crear una secuencia de imágenes en forma de video.
import numpy as np import skvideo.io out_video = np.empty([5, height, width, 3], dtype = np.uint8) out_video = out_video.astype(np.uint8) for i in range(5): img = cv2.imread(str(i) + '.png') out_video[i] = img # Writes the the output image sequences in a video file skvideo.io.vwrite("video.mp4", out_video)Puedes usar este paquete pip . Proporciona comandos CLI para hacer videos a partir de imágenes.
img_to_vid.py -f directorio_imágenes