В этом уроке мы узнаем, как создать видео из массивов numpy изображений.
Мы рассмотрим два примера. Первый считывает изображения из файловой системы и создает видео. Второй пример создает видео непосредственно из программно сгенерированных массивов numpy в Python.
Чтобы создать видео из массивов изображений, выполните следующую последовательность шагов:
- Инициализируйте Video Writer, указав следующие элементы:
- имя выходного видео файла;
- код fourcc, определяющий кодек;
- количество кадров в секунду;
- размер кадра видео.
- Запишите каждый массив изображений в объект Video Writer.
- Отпустите Video Writer.
- Имя выходного видео файла:
- код fourcc, определяющий кодек;
- количество кадров в секунду;
- размер кадра видео.
Пример 1
В этом примере мы будем читать изображения, находящиеся в папке, одно за другим. Затем мы будем использовать Video Writer для записи каждого изображения в цикле в выходной файл видео.
import cv2
import numpy as np
import glob
frameSize = (500, 500)
out = cv2.VideoWriter('output_video.avi',cv2.VideoWriter_fourcc(*'DIVX'), 60, frameSize)
for filename in glob.glob('D:/images/*.jpg'):
img = cv2.imread(filename)
out.write(img)
out.release()
- output_video.avi – это имя файла вывода видео.
- cv2.VideoWriter_fourcc (* ‘DIVX’) – это кодек.
- 60 – это количество кадров в секунду. Итак, 60 изображений нужно использовать для создания видео длительностью в одну секунду. Вы можете изменить это значение в соответствии с требованиями.
- frameSize = (500, 500) определяет ширину и высоту выходного видео.
В приведенной выше программе цикл for считывает все файлы .jpg один за другим в массив numpy с помощью cv2.imread(). И массив numpy изображений записывается в видеофайл с помощью Video Writer.
Обратите внимание, что порядок изображений, записываемых в видеофайл, зависит от того, как glob читает файлы из папки.
Вы можете контролировать порядок файлов, которые вы читаете в цикле for, тем самым управляя порядком изображений в видео.
Пример 2: создание из множества массивов
В этом примере мы создадим массив из нескольких массивов. Затем мы воспользуемся им:
import cv2
import numpy as np
frameSize = (500, 500)
out = cv2.VideoWriter('output_video.avi',cv2.VideoWriter_fourcc(*'DIVX'), 60, frameSize)
for i in range(0,255):
img = np.ones((500, 500, 3), dtype=np.uint8)*i
out.write(img)
out.release()
В этом руководстве на примерах Python мы узнали, как записывать изображения в видеофайл с помощью библиотеки Python OpenCV cv2.
делаю из png по первому примеру. на выходе получается пустой output_video.avi с размером 5686 байт. Может во время правки кода я ошибку внес?
import cv2
import numpy as np
import glob
frameSize = (500, 500)
out = cv2.VideoWriter(‘output_video.avi’,cv2.VideoWriter_fourcc(*’DIVX’), 60, frameSize)
count = 0
for filename in glob.glob(‘2/*.png’):
img = cv2.imread(filename)
out.write(img)
print(count,filename)
count += 1
out.release()
Есть способ при добавлении каждого кадра добавлять еще и один звук(например случайную ноту)? как это возможно реализовать средствами OpenCV?