Как сохранить массив с изображениями во временном файле, чтобы избежать заполнения памяти? - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь создать короткое видео из изображений .png. Поэтому я создаю массив изображений:

        img_array = []
            for filename in glob.glob('pics/*.png'):
                img = cv2.imread(filename)
                height, width, layers = img.shape
                size = (width, height)
                img_array.append(img)

Кажется, массив не велик, но его элементы:

>>> sys.getsizeof(img_array[0])
14745728
>>> sys.getsizeof(img_array)
4272

Это занимает всю мою память и замедляет работукак массив становится большим. Поэтому я думаю об использовании временных файлов на диске вместо памяти.

Я пытался использовать numpy.memmap, но, похоже, он предназначен только для строк:

Аргумент TypeError: int () должен быть строкой, байтовоподобным объектом или числом, а не 'PngImageFile'

Также я пытался использовать TemporaryFile из временного файла. Это также, кажется, не является подходящим способом, так как выдает:

AttributeError: '_io.BufferedRandom' объект не имеет атрибута 'append'

С короткими массивами,Мне удается сделать видео следующим образом:

img_array = []
for filename in glob.glob('pics/*.png'):
   img = cv2.imread(filename)
   height, width, layers = img.shape
   size = (width, height)
   img_array.append(img)

out = cv2.VideoWriter('project.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 30, size) # die Zahl da gibt die FPS an

for i in range(len(img_array)):
   out.write(img_array[i])
out.release()

Как мне передать большой объем (около 3000) файлов .png в мое видео, не занимая слишком много памяти?

...