pyvips может обрабатывать огромные изображения быстро и с небольшим объемом памяти .Это LGPL, работает на Linux, MacOS и Windows, и работает на всех версиях Python.У большинства linux (включая Ubuntu) он есть в менеджере пакетов.
Это управляемая спросом библиотека потоковой обработки изображений.Вместо того, чтобы обрабатывать изображения в виде огромных кусков, он создает сеть операторов обработки изображений за вашей спиной, и пиксели вытягиваются из памяти вашего компьютера в небольших регионах из-за необходимости создавать выходные данные.
Например, я могузапустите эту программу:
import sys
import pyvips
# access='sequential' puts pyvips into streaming mode for this image
im = pyvips.Image.new_from_file(sys.argv[1], access='sequential')
im = im.crop(100, 100, im.width - 200, im.height - 200)
# 10% shrink, lanczos3 (by default)
im = im.resize(0.9)
mask = pyvips.Image.new_from_array([[-1, -1, -1],
[-1, 16, -1],
[-1, -1, -1]], scale=8)
# integer convolution ... you can use large float masks too, canny,
# sobel, etc. etc.
im = im.conv(mask, precision='integer')
im.write_to_file(sys.argv[2])
На изображении GeoTIFF размером 40k x 30k пикселей:
$ vipsheader SAV_X5S_transparent_mosaic_group1.tif
SAV_X5S_transparent_mosaic_group1.tif: 42106x29852 uchar, 4 bands, srgb, tiffload
На этом ноутбуке 2015 года работает так:
$ /usr/bin/time -f %M:%e python3 bench.py SAV_X5S_transparent_mosaic_group1.tif x.tif
257012:101.43
т.е.260 МБ ОЗУ, 101 с истекшего времени.Это должно быть немного быстрее на вашей большой машине.
Одна из проблем, с которой вы можете столкнуться, связана с тегами GeoTIFF: они не будут сохраняться pyvips.Возможно, они вам не понадобятся при дальнейшей обработке.