Не удается применить фильтры изображения к 16-битным TIF в PIL - PullRequest
4 голосов
/ 09 ноября 2011

Я пытаюсь применить фильтры изображений, используя Python PIL .Код прост:

im = Image.open(fnImage)
im = im.filter(ImageFilter.BLUR)

Этот код работает, как и ожидалось, для PNG, JPG и 8-битных TIF.Однако, когда я пытаюсь применить этот код к 16-битным TIF, я получаю следующую ошибку

ValueError: image has wrong mode

Обратите внимание, что PIL смог загружать, изменять размер и сохранять 16-битные TIF без жалоб, поэтому я предполагаю,что эта проблема связана с фильтрами.Тем не менее, Документация ImageFilter ничего не говорит о 16-битной поддержке

Есть ли способ ее решить?

Ответы [ 2 ]

15 голосов
/ 15 ноября 2011

Режим изображения TIFF, скорее всего, "I; 16". В текущей версии ImageFilter ядра могут применяться только к Изображения «L» и «RGB» (см. Источник ImageFilter.py)

Попробуйте сначала преобразовать в другой режим:

im.convert('L')

Если не получится, попробуйте:

im.mode = 'I'
im = im.point(lambda i:i*(1./256)).convert('L').filter(ImageFilter.BLUR)

Примечание: возможна копия из Python и 16-битного Tiff

0 голосов
/ 14 ноября 2011

Чтобы продвинуться вперед, попробуйте использовать ImageMagick , найдите зацепки PythonMagick к программе. В командной строке вы можете использовать convert.exe image-16.tiff -blur 2x2 output.tiff. Не удалось установить PythonMagick в моей ОС Windows, так как исходный код требует компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...