Python: манипулирование 16-битным изображением .tiff в PIL и / или pygame: каким-то образом преобразовать в 8-битный? - PullRequest
4 голосов
/ 24 апреля 2011

enter image description here Привет всем,

Я работаю над программой, которая определяет средний размер колонии дрожжей по фотографии, и она отлично работает с изображениями .bmp, на которых я ее тестировал.Программа использует pygame и может использовать PIL позже.

Однако комбинация камеры / программного обеспечения, которую мы используем в моей лаборатории, сохранит только 16-битные оттенки серого, и pygame, похоже, не сможет распознать 16-бит тифф, только 8 бит.В течение последних нескольких часов я читал о том, как легко обойти это, но, похоже, даже библиотека изображений Python не способна работать с 16-разрядными файлами .tiff, я пробовал и получаю «IOError: невозможно идентифицировать изображениеfile ".

import Image

img = Image.open("01 WT mm.tif")

Моя конечная цель - сделать эту программу удобной и простой в установке, поэтому я стараюсь не добавлять дополнительные модули и не требовать, чтобы люди устанавливали ImageMagick или что-то в этом роде.

Кто-нибудь знает простой способ решения этой проблемы с помощью бесплатного программного обеспечения или чистого Python?Я не слишком много знаю об изображениях: манипуляции с битовой глубиной выходят за рамки моей компетенции.Но я совершенно уверен, что мне не нужны все 16 битов, и что, вероятно, только около 8 действительно имеют реальные данные.Фактически, я однажды использовал ImageMagick, чтобы попытаться преобразовать их, и в результате получилось полностью белое изображение: с тех пор я прочитал, что должен использовать команду «-auto-level», потому что данные на самом деле не охватывают 16-битовый диапазон.

Я очень ценю вашу помощь и прошу прощения за отсутствие знаний.

PS: У кого-нибудь есть какие-либо советы о том, как сделать мою программу на Python простой в установке для непрограммистов??Есть ли способ, например, как-то связать его с Python и pygame, чтобы это была только одна установка?Это можно сделать как для Windows, так и для Mac?Спасибо.

РЕДАКТИРОВАТЬ: я пытался открыть его в GIMP, и получил 3 ошибки:

1) Неверный счет для поля «DateTime» (27, ожидая 20);тег обрезан 2) Извините, не могу обрабатывать изображения с 12-битными сэмплами 3) Неподдерживаемый макет, нет загрузчика RGBA

Что это значит и как мне его подогнать?

Ответы [ 3 ]

2 голосов
/ 24 апреля 2011

py2exe - это способ упаковки вашего приложения, если вы работаете в системе Windows.

Относительно 16-ти битного вопроса:

Этот пример http://ubuntuforums.org/showthread.php?t=1483265 показывает, как конвертировать для отображения с использованием PIL.

Теперь к вопросу с незаданной порцией: при анализе изображений вы хотите поддерживать максимально возможный динамический диапазон при манипуляциях с изображениями - при этом вы теряете меньше информации. Как вы можете знать или не знать, PIL предоставляет вам множество фильтров / преобразований, которые позволят вам повысить контрастность изображения, выровнять уровни освещенности или выполнить обнаружение краев. Будущее направление, которое вы могли бы рассмотреть, - это отображение исходного изображения (конечно, с масштабированием до 8 бит) вдоль масштабированного изображения, которое было обработано для обнаружения края.

Проверьте http://code.google.com/p/pyimp/wiki/screenshots, чтобы найти еще несколько примеров и пример кода.

2 голосов
/ 24 апреля 2011

Я бы посмотрел на Pylibtiff , который имеет чистый читатель Python TIFF.

Для комплектации лучше всего подойдут py2exe и py2app.

1 голос
/ 24 апреля 2011

Это фактически вопрос из 2 частей:

1) 16-битное искажение данных изображения для Python - я обычно использую GDAL + Numpy. Это может быть слишком много для ваших требований, вместо этого вы можете использовать PIL + Numpy.

2) Проектирование релизов В приложениях Python могут возникнуть проблемы. В зависимости от сложности вашего приложения вы можете использовать py2deb , py2app и py2exe . Обучение distutils тоже поможет.

...