Python | Cree videos usando múltiples imágenes usando OpenCV

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

Publicación traducida automáticamente

Artículo escrito por md1844 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *