Объединяем изображения в видеофайл с 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. Сначала мы вычислили средние размеры изображений, затем изменили их размер и, наконец, собрали их в видеоролик. Этот процесс можно использовать для создания различных анимаций и слайд-шоу. Надеюсь, эта статья была полезной и вдохновляющей для вас!
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.