Como sabemos, OpenCV es una biblioteca ampliamente utilizada para el procesamiento de imágenes. Proporciona una amplia sensación de procesamiento de imágenes. Veamos cómo crear videos usando múltiples imágenes usando OpenCV.
Instale las siguientes bibliotecas:
PIL
cv2
Además, verifique la ruta antes de ejecutar el código; de lo contrario, estará lleno de errores.
Cómo funciona ?
Al usar la biblioteca PIL, estamos abriendo imágenes y redimensionándolas a su altura media y ancho medio porque el video que se creará usando la biblioteca cv2 requiere imágenes de entrada de la misma altura y ancho . Las imágenes redimensionadas se incluyen en una array y el cuadro de video se establece con mean_height y mean_width . Luego, al hacer un bucle, agregamos cada imagen a ese cuadro.
A continuación se muestra la implementación:
# importing libraries import os import cv2 from PIL import Image # Checking the current directory path print(os.getcwd()) # Folder which contains all the images # from which video is to be generated os.chdir("C:\\Python\\Geekfolder2") path = "C:\\Python\\Geekfolder2" mean_height = 0 mean_width = 0 num_of_images = len(os.listdir('.')) # print(num_of_images) for file in os.listdir('.'): im = Image.open(os.path.join(path, file)) width, height = im.size mean_width += width mean_height += height # im.show() # uncomment this for displaying the image # Finding the mean height and width of all images. # This is required because the video frame needs # to be set with same width and height. Otherwise # images not equal to that width height will not get # embedded into the video mean_width = int(mean_width / num_of_images) mean_height = int(mean_height / num_of_images) # print(mean_height) # print(mean_width) # Resizing of the images to give # them same width and height for file in os.listdir('.'): if file.endswith(".jpg") or file.endswith(".jpeg") or file.endswith("png"): # opening image using PIL Image im = Image.open(os.path.join(path, file)) # im.size includes the height and width of image width, height = im.size print(width, height) # resizing imResize = im.resize((mean_width, mean_height), Image.ANTIALIAS) imResize.save( file, 'JPEG', quality = 95) # setting quality # printing each resized image name print(im.filename.split('\\')[-1], " is resized") # Video Generating function def generate_video(): image_folder = '.' # make sure to use your folder video_name = 'mygeneratedvideo.avi' os.chdir("C:\\Python\\Geekfolder2") images = [img for img in os.listdir(image_folder) if img.endswith(".jpg") or img.endswith(".jpeg") or img.endswith("png")] # Array images should only consider # the image files ignoring others if any print(images) frame = cv2.imread(os.path.join(image_folder, images[0])) # setting the frame width, height width # the width, height of first image height, width, layers = frame.shape video = cv2.VideoWriter(video_name, 0, 1, (width, height)) # Appending the images to the video one by one for image in images: video.write(cv2.imread(os.path.join(image_folder, image))) # Deallocating memories taken for window creation cv2.destroyAllWindows() video.release() # releasing the video generated # Calling the generate_video function generate_video()
Producción:
Obtenga el enlace a las imágenes de entrada utilizadas y el video de salida desde aquí .
Mejores alternativas:
Si queremos más efectos, sonido con el vídeo entonces será bueno usar el que ofrece este tipo de funcionalidades. ffmpeg python library