Я обрабатываю несколько сотен изображений, разрезая их автоматически на определенной высоте и вставляя куски один за другим. Я создаю новый экземпляр Image
с new
с более высоким размером, чем в последний раз, чтобы освободить место для нового фрагмента. Когда процессия выполняется, конечный результат сохраняется в файле.Как вставить кусок изображений один за другим эффективно?
Моя проблема прямо сейчас в том, что этот подход заключается в том, что он потребляет много оперативной памяти и свопа, почти замораживая мой компьютер. Есть ли способ достичь моей цели, не потребляя много оперативной памяти? до сих пор, это код, у меня есть:
import SimpleCV as cv
import argparse
import PIL
from os.path import join, abspath
parser = argparse.ArgumentParser(
description=("Process many images and paste the chunks into a final image"))
# ...code removed for brevity...
argv = parser.parse_args()
rango_inicio = int(argv.rango.split(":")[0])
rango_fin = int(argv.rango.split(":")[1])
img = None
for pag in xrange(rango_inicio, rango_fin + 1):
numero = format(pag, '0' + argv.relleno)
pagina = join(
argv.dir_entrada, argv.prefijo + numero + '.' + argv.extension)
pagina = abspath(pagina)
print(pagina)
imagen = cv.Image(pagina)
fs = sorted(imagen.findLines(), key=lambda f: f.width())[-1]
if fs.width() >= 598:
cropped = imagen.crop(0, fs.y, imagen.width, imagen.height)
if not img:
img = PIL.Image.new("RGB", (cropped.width, cropped.height))
croppedraw = cropped.getPIL()
img.paste(croppedraw, (0, 0))
else:
croppedraw = cropped.getPIL()
imgtmp = img.copy()
img = PIL.Image.new(
"RGB", (imgtmp.size[0], imgtmp.size[1] + cropped.height))
img.paste(imgtmp, (0, 0))
img.paste(croppedraw, (0, imgtmp.size[1]))
# and save the final image