Как собрать видео из list[np.array]?

Ссылка скопирована
1 ответ

У меня есть список из 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?

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Павел Админов Ответ

Для сборки видео из списка массивов 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()

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, если она у вас еще не установлена.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно