Как избежать ошибки «Ошибка сегментации (ядро сброшено)» при загрузке больших изображений .JP2 с помощью PIL / OpenCV / Matplotlib? - PullRequest
1 голос
/ 18 июня 2019

Я выполняю следующую простую строку в коротком скрипте без каких-либо проблем:

Python 3.5.2;
PIL 1.1.7;
OpenCV 2.4.9.1;
Matplotlib 3.0.1;

...
# for example:
img = plt.imread(i1)
...

Однако, если размер загруженного .JP2> ~ 500 МБ, Python3 выдает следующую ошибку при попытке загрузить изображение:

«Ошибка сегментации (ядро сброшено)»

Это не должно быть проблемой ОЗУ, так как только ~ 40% доступной ОЗУ используется при возникновении ошибки + ошибка остается такой же, когда ОЗУ извлекается или добавляется на компьютер. Ошибка также остается той же при использовании других способов загрузки изображения, например, с PIL.

Есть ли способ избежать этой ошибки или обойти ее? Большое спасибо!

1 Ответ

0 голосов
/ 21 июня 2019

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

Если вы хотите выполнить несколько операций или кадрировать на каждом изображении монстра JP2, этовозможно, стоит заплатить цену заранее, только один раз, чтобы преобразовать в формат, который ImageMagick впоследствии сможет обрабатывать более легко.Итак, ваше изображение размером 20048x80000 с 2-байтовыми шортами, поэтому вы можете расширить его до 16-битного файла PGM, например:

convert monster.jp2 -depth 16 image.pgm

, и это займет около 3 минут.Однако, если вы теперь хотите извлечь часть изображения каким-то образом вниз по его высоте, теперь вы можете извлечь из PGM:

convert image.pgm -crop 400x400+0+6000 tile.tif

за 18 секунд вместо монстра JP2:

convert monster.jp2 -crop 400x400+0+6000 tile.tif

, что занимает 153 секунды.


Обратите внимание, что PGM будет занимать много места на диске .... Я думаю, вы можете попробовать то же самое с TIFF, который может содержать 16-битданные тоже могут быть сжаты LZW.Я полагаю, вы также можете использовать libvips для еще более быстрого извлечения плиток из файла PGM.

...