Чтение исходных изображений с помощью PIL и Python

У меня есть изображение 7 Гб, которое я получил от NASA, и я хотел написать декодер, используя Python и PIL. На странице, где я получил изображение, указано следующее:

Данные форматируются как одноканальный 16-разрядный целочисленный (двухбайтовый, длинный) подписанный необработанный двоичный файл, с байтовым порядком байтов и без заголовка.

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

  • Умножение кортежа на скаляр
  • Преобразование RGBA PNG в RGB с PIL
  • Python / PIL: создание и сохранение изображения из данных uri
  • Что это означает в python AccessInit: хеш-столкновение: 3 для 1 и 1?
  • Niqqud неправильно выравниваются при рисовании текста на иврите, используя PIL (Python Imaging Library)
  • Использование шрифтов в PIL без freetype
  • библиотека декодера python captcha
  • рисование линии на изображении с помощью PIL
  • 3 Solutions collect form web for “Чтение исходных изображений с помощью PIL и Python”

    Я много разбираюсь с необработанными изображениями, некоторые из них – в 16 бит, а некоторые – в черно-белом режиме.

    Я обнаружил, что загрузка необработанного изображения в массив numpy, а затем преобразование его в изображение обычно работает.

    Если есть проблема с порядком байта, команда numpy array.byteswap () должна позаботиться об этом перед преобразованием в объект изображения PIL.

    Этот код берется из программы, которая работает для чтения 8-битных необработанных изображений в PIL:

    scene_infile = open(scene_infile_fullname,'rb') scene_image_array = fromfile(scene_infile,dtype=uint8,count=rows*columns) scene_image = Image.frombuffer("I",[columns,rows], scene_image_array.astype('I'), 'raw','I',0,1) 

    Во второй строке изменение от uint8 до uint16 будет загружать 2 байта вместо 1-байтового необработанного изображения. В третьей строке изображение преобразуется в 4-байтовое целое число, поскольку некоторые из подпрограмм PIL, похоже, работают лучше с этим типом.

    Проблема, с которой вы сталкиваетесь, заключается в том, что файлы являются 16-разрядными пикселями, когда PIL поддерживает только 8-битные пиксели в предоставленном списке, а 16-разрядный маленький конец из этой почты по той же теме:

    http://osdir.com/ml/python.image/2006-11/msg00021.html

    Это было 4 года назад, и в этом году эта тема снова поднимается:

    http://mail.python.org/pipermail/image-sig/2010-April/006166.html

    Нашли это, глядя в .../Imaging-1.1.7/PIL/Image.py источников для PIL v1.1.7 , обратите внимание на комментарий в конце о некоторых «экспериментальных режимах»:

     # -------------------------------------------------------------------- # Modes supported by this version _MODEINFO = { # NOTE: this table will be removed in future versions. use # getmode* functions or ImageMode descriptors instead. # official modes "1": ("L", "L", ("1",)), "L": ("L", "L", ("L",)), "I": ("L", "I", ("I",)), "F": ("L", "F", ("F",)), "P": ("RGB", "L", ("P",)), "RGB": ("RGB", "L", ("R", "G", "B")), "RGBX": ("RGB", "L", ("R", "G", "B", "X")), "RGBA": ("RGB", "L", ("R", "G", "B", "A")), "CMYK": ("RGB", "L", ("C", "M", "Y", "K")), "YCbCr": ("RGB", "L", ("Y", "Cb", "Cr")), # Experimental modes include I;16, I;16L, I;16B, RGBa, BGR;15, and # BGR;24. Use these modes only if you know exactly what you're # doing... } 

    Таким образом, похоже, что в нем есть поддержка для 16-битных изображений.

    UTSL – используйте источник Luke

    Python - лучший язык программирования в мире.