Здравствуйте! В сегодняшней статье рассмотрим, как создать видео из набора изображений с помощью Python . Эта задача может быть полезна для создания слайд-шоу, анимаций или просто для объединения изображений в видеоролик. Мы используем библиотеки os , cv2 и PIL для выполнения этой задачи. Давайте разберем, как это с...

Объединяем изображения в видеофайл с Python и OpenCV

Здравствуйте! В сегодняшней статье рассмотрим, как создать видео из набора изображений с помощью Python. Эта задача может быть полезна для создания слайд-шоу, анимаций или просто для объединения изображений в видеоролик. Мы используем библиотеки os, cv2 и PIL для выполнения этой задачи. Давайте разберем, как это сделать.

Шаг 1: Импорт необходимых библиотек

Для начала нам понадобятся библиотеки os для работы с файловой системой, cv2 (OpenCV) для работы с изображениями и видео, а также PIL (Pillow) для обработки изображений. Мы импортируем их следующим образом:

import os
import cv2
from PIL import Image

Шаг 2: Вычисление средних размеров изображений

Чтобы создать видео, нам нужно, чтобы все изображения имели одинаковый размер. Для этого мы сначала вычислим средние ширину и высоту всех изображений в указанной папке:

def calculate_mean_dimensions(image_folder):
    total_width = 0
    total_height = 0
    num_images = 0

    for file in os.listdir(image_folder):
        try:
            with Image.open(os.path.join(image_folder, file)) as img:
                width, height = img.size
                total_width += width
                total_height += height
                num_images += 1
        except Exception as e:
            print(f"Ошибка при открытии изображения {file}: {e}")

    if num_images == 0:
        raise ValueError("В каталоге не найдено допустимых изображений.")

    mean_width = total_width // num_images
    mean_height = total_height // num_images

    return mean_width, mean_height

Шаг 3: Изменение размеров изображений

Теперь, когда у нас есть средние размеры, мы можем изменить размер каждого изображения до этих значений:

def resize_images(image_folder, mean_width, mean_height):
    for file in os.listdir(image_folder):
        if file.lower().endswith((".jpg", ".jpeg", ".png")):
            try:
                with Image.open(os.path.join(image_folder, file)) as img:
                    img_resized = img.resize((mean_width, mean_height), Image.ANTIALIAS)
                    img_resized.save(os.path.join(image_folder, file), 'JPEG', quality=95)
                    print(f"{file} изменен до размеров {mean_width}x{mean_height}")
            except Exception as e:
                print(f"Ошибка при обработке изображения {file}: {e}")

Шаг 4: Создание видео из изображений

Теперь мы готовы создать видео из измененных изображений:

def generate_video(image_folder, video_name='generated_video.avi', fps=1):
    images = [img for img in os.listdir(image_folder) if img.lower().endswith((".jpg", ".jpeg", ".png"))]

    if not images:
        raise ValueError("В каталоге не найдено изображений для создания видео.")

    first_image_path = os.path.join(image_folder, images[0])
    frame = cv2.imread(first_image_path)
    height, width, layers = frame.shape

    video = cv2.VideoWriter(video_name, cv2.VideoWriter_fourcc(*'DIVX'), fps, (width, height))

    for image in images:
        img_path = os.path.join(image_folder, image)
        video.write(cv2.imread(img_path))

    video.release()
    print(f"Видео {video_name} успешно создано.")

Шаг 5: Объединение всех шагов

Осталось объединить все шаги в одну основную функцию:

def main():
    image_folder = "C:\\Python\\MyFolder"
    os.chdir(image_folder)

    mean_width, mean_height = calculate_mean_dimensions(image_folder)
    resize_images(image_folder, mean_width, mean_height)
    generate_video(image_folder)

if __name__ == "__main__":
    main()

Заключение

Таким образом, мы рассмотрели, как создать видео из набора изображений с помощью Python. Сначала мы вычислили средние размеры изображений, затем изменили их размер и, наконец, собрали их в видеоролик. Этот процесс можно использовать для создания различных анимаций и слайд-шоу. Надеюсь, эта статья была полезной и вдохновляющей для вас!