Comment Créer des Vidéos à Partir d’Images Avec OpenCV

Comment créer des vidéos à partir d'images avec OpenCV

Manipuler les Vidéos Avec OpenCV

Introduction

Lorsque l’on plonge dans le domaine de la vision par ordinateur et de l’apprentissage automatique, la capacité à transmettre vos découvertes et vos progrès est primordiale. Les images statiques ne capturent pas toujours l’essence de votre travail. Dans ce guide complet, nous explorerons l’art de créer des vidéos captivantes à l’aide d’OpenCV, en mettant l’accent sur le célèbre effet Ken Burns.

Source Vidéo : Rob Mulla
Manipulation de la vidéo

Comprendre l’Effet Ken Burns

Qu’est-ce Que l’Effet Ken Burns ?

Nommée d’après le cinéaste Ken Burns, cette technique consiste à effectuer des panoramiques et des zooms dynamiques sur des images. Au lieu de présenter une photo statique, l’effet Ken Burns donne vie à vos visuels en zoomant sur les détails et en faisant défiler en douceur l’image.

Créer l’Animation Ken Burns Avec OpenCV

La Magie du Recadrage Avec OpenCV

L’essence de l’effet Ken Burns réside dans l’art du recadrage. Chaque image de la vidéo est essentiellement une version recadrée de l’image originale, zoomée pour remplir l’écran. Avec OpenCV et ses puissants tableaux numpy, cela devient une danse élégante.

def crop(img, x, y, w, h): x0, y0 = max(0, x - w//2), max(0, y - h//2) x1, y1 = x0 + w, y0 + h return img[y0:y1, x0:x1]

La Chorégraphie Panoramique et de Zoom Avec OpenCV

Pour orchestrer la danse du panoramique et du zoom, nous devons définir nos constantes :

video_dim = (1280, 720) fps = 25 duration = 2.0 start_center = (0.4, 0.6) end_center = (0.5, 0.5) start_scale = 0.7 end_scale = 1.0

Maintenant, avec ces paramètres, nous pouvons créer une vidéo envoûtante. Pour chaque image, nous calculons les coordonnées de recadrage, ajustons le format pour l’aspect ratio et redimensionnons l’image recadrée.

num_frames = int(fps * duration) frames = [] for alpha in np.linspace(0, 1, num_frames): rx = end_center[0] * alpha + start_center[0] * (1 - alpha) ry = end_center[1] * alpha + start_center[1] * (1 - alpha) x = int(orig_shape[1] * rx) y = int(orig_shape[0] * ry) scale = end_scale * alpha + start_scale * (1 - alpha) # déterminer comment recadrer en fonction du rapport largeur/hauteur si orig_shape[1] / orig_shape[0] > video_dim[0] / video_dim[1]: h = int(orig_shape[0] * scale) w = int(h * video_dim[0] / video_dim[1]) else: w = int(orig_shape[1] * scale) h = int(w * video_dim[1] / video_dim[0]) # recadrer, redimensionner à la taille de la vidéo et enregistrer l'image recadrée cropped = crop(img, x, y, w, h) scaled = cv2.resize(cropped, dsize=video_dim, interpolation=cv2.INTER_LINEAR) frames.append(scaled)

Donner Vie Aux Images

Le dernier acte consiste à assembler toutes ces images en une vidéo sans couture. Le VideoWriter d’OpenCV vient à notre rescousse.

# écrire dans un fichier MP4 vidwriter = cv2.VideoWriter("output.mp4", cv2.VideoWriter_fourcc(*"mp4v"), fps, video_dim) for frame in frames: vidwriter.write(frame) vidwriter.release()

Commencer

Pour illustrer cet effet, commençons par une image haute résolution, comme la photo de football disponible ici. Cette image, avec ses 1600 x 1067 pixels, sera notre toile.

Créer des Vidéos à Partir d’Images Avec OpenCV

Time Needed : 00 hours 30 minutes

Voici les étapes à suivre pour obtenir les meilleurs résultats de ce tutoriel. Cela va être intéressant, alors prenez une tasse de café et commençons :

  1. Étape 1: Importer les Bibliothèques Nécessaires

    Pour commencer, importez la bibliothèque OpenCV avec la ligne de code suivante :
    import cv2

    Les opérations ci-dessus peuvent être effectuées comme indiqué dans l’image suivante :

    open cv video manipulation

  2. Étape 2: Définir la Fonction

    Définissez la fonction ken_burns_effect() qui prend le chemin de l’image d’entrée, le chemin de la vidéo de sortie, la durée et le facteur de zoom comme paramètres. La fonction peut être définie comme suit :
    def ken_burns_effect(image_path, output_path, duration=5, zoom=1.2):
    # Fonction ici

    Les opérations ci-dessus peuvent être effectuées comme indiqué dans l’image suivante :

    open cv video manipulation

  3. Étape 3: Lire l’Image d’Entrée

    Obtenez l’image que vous avez téléchargée précédemment pour l’utiliser dans votre programme OpenCV, en utilisant le code suivant :
    image = cv2.imread(image_path) if image is None: print("Error: Image not found!") return

    Les opérations ci-dessus peuvent être effectuées comme indiqué dans l’image suivante :

    open cv video manipulation

  4. Étape 4: Obtenir les dimensions de l’image d’entrée

    Obtenez les dimensions de l’image que vous avez précédemment importée dans votre programme, en utilisant le code suivant :
    height, width = image.shape[:2]

    Les opérations ci-dessus peuvent être effectuées comme indiqué dans l’image suivante :

    open cv video manipulation

  5. Étape 5: Définir l’échelle de départ et de fin

    Définissez les facteurs d’échelle de départ et de fin pour le zoom et les valeurs de translation de départ et de fin pour le panoramique, avec le code suivant :
    start_scale = 1.0 end_scale = zoom start_translation = (0, 0) end_translation = (width * (end_scale - 1) / 2, height * (end_scale - 1) / 2)

    Les opérations ci-dessus peuvent être effectuées comme indiqué dans l’image suivante :

    open cv video manipulation

  6. Étape 6: Définir les images clés

    Définissez le nombre total d’images clés pour la vidéo en fonction de la durée spécifiée, en utilisant le code suivant :
    num_frames = duration * 25 # Assuming 25 frames per second

    Les opérations ci-dessus peuvent être effectuées comme indiqué dans l’image suivante :

    open cv video manipulation

  7. Étape 7: Créer un objet de rédaction vidéo

    Créez un objet rédacteur vidéo pour enregistrer la vidéo de l’effet Ken Burns, en utilisant le code suivant :
    fourcc = cv2.VideoWriter_fourcc(*'mp4v') video_writer = cv2.VideoWriter(output_path, fourcc, 25, (width, height))

    Les opérations ci-dessus peuvent être effectuées comme indiqué dans l’image suivante :

    open cv video manipulation

  8. Étape 8: Appliquer l’effet Ken Burns

    Appliquez l’effet Ken Burns image par image en interpolant les valeurs d’échelle et de translation, en utilisant le code suivant :
    for i in range(num_frames): t = i / num_frames current_scale = start_scale + (end_scale - start_scale) * t current_translation = (int(start_translation[0] + (end_translation[0] - start_translation[0]) * t), int(start_translation[1] + (end_translation[1] - start_translation[1]) * t)) transform_matrix = cv2.getRotationMatrix2D((width / 2, height / 2), 0, current_scale) transform_matrix[:, 2] += current_translation transformed_image = cv2.warpAffine(image, transform_matrix, (width, height)) video_writer.write(transformed_image)

    Les opérations ci-dessus peuvent être effectuées comme indiqué dans l’image suivante :

    open cv video manipulation

  9. Étape 9: Libérer le rédacteur vidéo

    Libérez le rédacteur vidéo, en utilisant le code suivant :
    video_writer.release() print("Ken Burns effect video saved successfully!")

    Les opérations ci-dessus peuvent être effectuées comme indiqué dans l’image suivante :

    open cv video manipulation

  10. Étape 10: Définir les chemins de l’image d’entrée et de la vidéo de sortie

    Définissez le chemin de l’image d’entrée et le chemin de la vidéo de sortie, et appelez la fonction ken_burns_effect() avec les paramètres souhaités, en utilisant le code suivant :
    if name == "main":
    input_image = "input_image.jpg"
    output_video = "ken_burns_effect.mp4"
    ken_burns_effect(input_image, output_video, duration=5, zoom=1.2)


    Les opérations ci-dessus peuvent être effectuées comme indiqué dans l’image suivante :

    open cv video manipulation
    Si tout se passe bien, vous devriez voir un message disant que la vidéo a été enregistrée avec succès, et vous verrez également la vidéo enregistrée dans son répertoire respectif.

La vidéo résultante du programme ci-dessus ressemble à ce qui suit :

Source de la vidéo : TERRA-X
Comment créer des vidéos à partir d’images avec OpenCV

Si vous préférez copier des parties du code ou lire le contenu complet du fichier source téléchargé avant de l’extraire et de l’exécuter, consultez le code source brut ci-dessous.

Aussi, le code a été écrit dans un cahier Jupyter, et non avec le fichier Python par défaut. Vous devez peut-être en tenir compte, car cela détermine comment le code doit être compilé pour éviter tout souci. (dans Jupyter Notebook ou Jupyter Lab) et non pas en utilisant le compilateur Python par défaut.

Jupyter | Cell 2
def ken_burns_effect(image_path, output_path, duration=5, zoom=1.2):
    # Read the image
    image = cv2.imread(image_path)
    if image is None:
        print("Error: Image non trouvé!")
        return

    # Get image dimensions
    height, width = image.shape[:2]

    # Define starting and ending scale factors for zoom
    start_scale = 1.0
    end_scale = zoom

    # Define starting and ending translation values for panning
    start_translation = (0, 0)
    end_translation = (width * (end_scale - 1) / 2, height * (end_scale - 1) / 2)

    # Define total number of frames
    num_frames = duration * 25  # Assuming 25 frames per second

    # Create video writer object
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    video_writer = cv2.VideoWriter(output_path, fourcc, 25, (width, height))

    # Apply Ken Burns effect frame by frame
    for i in range(num_frames):
        # Interpolate scale and translation values for current frame
        t = i / num_frames
        current_scale = start_scale + (end_scale - start_scale) * t
        current_translation = (int(start_translation[0] + (end_translation[0] - start_translation[0]) * t),
                               int(start_translation[1] + (end_translation[1] - start_translation[1]) * t))

        # Create affine transformation matrix
        transform_matrix = cv2.getRotationMatrix2D((width / 2, height / 2), 0, current_scale)
        transform_matrix[:, 2] += current_translation

        # Apply transformation to the image
        transformed_image = cv2.warpAffine(image, transform_matrix, (width, height))

        # Write frame to video
        video_writer.write(transformed_image)

    # Release video writer
    video_writer.release()
    print("La vidéo avec l'effet Ken Burns a été enregistrée avec succès !")
Visit My GitHub At https://github.com/N-Elmer/
Jupyter | Cell 3
if __name__ == "__main__":
    input_image = "image/football.jpg"
    output_video = "video/ken_burns_effect.mp4"
    ken_burns_effect(input_image, output_video, duration=5, zoom=1.2)
Visit My GitHub At https://github.com/N-Elmer/

Conclusion

Félicitations ! Vous venez de maîtriser l’art de créer des vidéos visuellement époustouflantes avec l’effet Ken Burns en utilisant OpenCV. Cette technique met non seulement en valeur votre travail de manière plus dynamique, mais ajoute également une touche de professionnalisme à vos présentations. Plongez dans le monde de la vision par ordinateur, armé de la capacité de raconter votre histoire à travers des visuels captivants.

Quelques Questions Fréquemment Posées et Leurs Réponses

  1. Qu’est-ce que OpenCV et en quoi cela concerne-t-il la manipulation d’images ?

    OpenCV est une puissante bibliothèque de vision par ordinateur largement utilisée pour le traitement d’images.

  2. Pouvez-vous fournir des exemples pratiques de traitement d’images en utilisant OpenCV ?

    Oui, il existe des exemples pratiques illustrant le prétraitement d’images avec OpenCV.

  3. Comment OpenCV peut-il être utilisé pour la manipulation d’images en temps réel en Python ?

    OpenCV permet la manipulation d’images en temps réel en capturant des images et en appliquant des modifications en Python.

  4. Quels sont les concepts essentiels en vision par ordinateur et en traitement d’images pour les débutants ?

    Un guide pour débutants en vision par ordinateur et en traitement d’images avec OpenCV simplifie les concepts essentiels dans ces domaines de pointe.

Références

Autres Articles Intéressants

DON’T MISS OUT!

SCI-TECH

BE THE FIRST TO KNOW
WHEN OUR SCIENCE AND TECH UPDATES FEATURE ON TERRA-X AND GOOGLE NEWS

We don’t spam! Read our privacy policy for more info.

LATEST ARTICLES

PINTEREST

DELTA-X

Get All Latest Gaming Updates

spot_img

RELATED ARTICLES

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici