Как собрать видео из list[np.array]?
У меня есть список из np.array. Мне нужно собрать из этого видео и получать на выходе bytes. Вот мой вариант реализации:
def convert_arrays_to_video(array_list: list[np.array]): video = io.BytesIO() writer = imageio.get_writer(video, format='mp4', fps=30) for array in array_list: colored_array = np.uint8(cv2.cvtColor(array.plot(), cv2.COLOR_BGR2RGB)) writer.append_data(imageio.imread(colored_array)) video_bytes = video.read() with open('result.mp4', 'wb') as f: # временно, для теста f.write(video_bytes) return video_bytes |
def convert_arrays_to_video(array_list: list[np.array]): video = io.BytesIO() writer = imageio.get_writer(video, format='mp4', fps=30) for array in array_list: colored_array = np.uint8(cv2.cvtColor(array.plot(), cv2.COLOR_BGR2RGB)) writer.append_data(imageio.imread(colored_array)) video_bytes = video.read() with open('result.mp4', 'wb') as f: # временно, для теста f.write(video_bytes) return video_bytes
К сожалению, я получаю ошибку, указываю на imageio.imread(colored_array):
OSError: Cannot understand given URI: array([[[ 49, 46, 27], [ 59, 59, 40], .... |
OSError: Cannot understand given URI: array([[[ 49, 46, 27], [ 59, 59, 40], ....
Оказывается, imread читает только файлы. Что, тогда, загружать в append_data?
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для сборки видео из списка массивов NumPy можно воспользоваться библиотекой OpenCV в языке программирования Python. Ниже приведен пример кода, который показывает, как это можно сделать:
import cv2 import numpy as np # Создаем список изображений в виде массивов NumPy image_list = [np.array([[255, 0, 0], [0, 255, 0], [0, 0, 255]], dtype=np.uint8), np.array([[0, 255, 255], [255, 0, 255], [255, 255, 0]], dtype=np.uint8), np.array([[128, 128, 128], [0, 0, 0], [255, 255, 255]], dtype=np.uint8)] # Получаем размер первого изображения height, width, _ = image_list[0].shape # Создаем объект VideoWriter для записи видео out = cv2.VideoWriter('output.avi', cv2.VideoWriter_fourcc(*'XVID'), 1, (width, height)) # Записываем каждое изображение в видео for image in image_list: out.write(image) # Закрываем объект VideoWriter out.release()
В этом коде мы сначала создаем список изображений в виде массивов NumPy. Затем мы получаем размер первого изображения в списке и создаем объект VideoWriter, указывая имя выходного файла, кодек для записи видео, частоту кадров (1 кадр в секунду) и размер изображения. Далее мы записываем каждое изображение из списка в видео и закрываем объект VideoWriter.
После выполнения этого кода у вас будет создан файл output.avi, содержащий видео, собранное из изображений списка. Не забудьте установить библиотеку OpenCV, если она у вас еще не установлена.