В последнее время я играю с фотографией во времени, используя медианную укладку изображений на группу изображений или извлеченные видеокадры. Я создал небольшой скрипт, который хорошо работает с относительными нескольких изображений:Управление памятью Python со срединным укладчиком изображений
from PIL import Image
import os
import numpy as np
#Create a list of the images' data
imglist = []
for fname in os.listdir("input\\"):
imglist.append(np.array(Image.open("input\\"+fname)))
#Find the median of all image data in the stack, save it
median = np.uint8(np.median(imglist, axis=0))
Image.fromarray(median).save("median.png","PNG")
Очевидная проблема здесь состоит в том, что, если загружаются слишком много изображений в памяти сразу, они заполняют мой скудный 8 Гб оперативной памяти. Я пробовал подходы, которые включают разделение данных изображения на куски и вычисление медианы одного куска за раз и разделение данных изображения по цветному каналу, но когда есть много изображений для обработки, количество вызовов файлов, которые требуется для сохранения данные на образ диска по изображению приводят к массовому замедлению.
Мне интересно, можно ли каким-либо образом использовать весовую схему для вычисления медианы для нескольких изображений за раз, затем повторять результаты или использовать трюк, например виртуальную память, файлы с отображением памяти или что-то еще иначе устранить это чрезмерное использование памяти. Есть идеи?
Престола [ этот ответ] (http://stackoverflow.com/a/638050/1142167). –