Имеете дело с огромными (потенциально более 30000x30000) изображениями в Python? - PullRequest
11 голосов
/ 07 декабря 2010

Я пытаюсь использовать скрипт Python deepzoom.py для преобразования больших накладных изображений (часто более 1GP) в формат изображения Deep Zoom (т. Е. В формат листов Google Maps-esque), но, к сожалению, он работает на PIL,который обычно заканчивается сбоем из-за ограничений памяти.Создатель сказал, что он углубляется в VIPS, но даже nip2 (интерфейс GUI для VIPS) не может открыть изображение.В другом вопросе от кого-то другого (хотя и по той же теме) кто-то предложил OpenImageIO , который выглядит так, как будто у него есть возможность, и есть обертки Python, но не предоставлены соответствующие двоичные файлы, и пытаетсяскомпилировать его на Windows - это кошмар.

Есть ли альтернативные библиотеки для Python, которые я могу использовать?Я пробовал PythonMagickWand (оболочка для ImageMagick) и PythonMagick (оболочка для GraphicsMagick), но оба они также сталкиваются с проблемами памяти.

Ответы [ 5 ]

3 голосов
/ 23 мая 2011

У меня была очень похожая проблема, и я решил ее с помощью netpbm, который отлично работает на Windows.У Netpbm не было проблем с преобразованием огромных файлов .png, а затем срезанием, обрезкой, повторным объединением (используя pamcrop, pamdice и pamundice) и преобразованием обратно в .png без использования большого количества памяти.Я просто включил необходимые двоичные файлы и библиотеки netpbm в свое приложение и вызвал их из python.

1 голос
/ 11 декабря 2018

Я могу использовать pyvips для чтения изображений с размером (50000, 50000, 3):

img = pyvips.Image.new_from_file('xxx.jpg')
arr = np.ndarray(buffer=img.write_to_memory(),
                  dtype=np.uint8,
                  shape=[img.height, img.width, img.bands])
1 голос
/ 08 марта 2013

libvips поставляется с очень быстрым создателем DeepZoom, который может работать с изображениями любого размера.Попробуйте:

$ vips dzsave huge.tif mydz

Запишет плитки в mydz_files, а также напишет информационный файл mydz.dzi для вас.Обычно он в 10 раз быстрее deepzoom.py и не имеет ограничений по размеру.

См. в этой главе руководства для ознакомления с dzsave.

1 голос
/ 07 декабря 2010

Похоже, вы пытаетесь использовать изображения с географической привязкой или что-то подобное, для которых решение ГИС звучит более подходящим. Я бы использовал GDAL - это отличная библиотека и поставляется с простыми в использовании привязками Python через Swig.

В Windows проще всего установить его с помощью пакета FWTools Фрэнка Вармердама.

0 голосов
/ 07 декабря 2010

Полезна ли частичная загрузка?Если вы используете PIL и формат изображения .BMP: вы можете открыть () файл изображения (который не загружает его), затем выполнить обрезку (), а затем загрузить - что фактически будет загружать только часть изображениякоторый вы выбрали по урожаю.Вероятно, будет также работать с TGA, возможно, даже для JPG и менее эффективно для PNG и других форматов.

...