Каков наилучший способ загрузки сжатого файла CCITT T.3 с использованием Python? - PullRequest
2 голосов
/ 28 июля 2010

Я пытаюсь загрузить сжатый tiff CCITT T.3 в python и получить из него матрицу пикселей. Это должна быть просто логическая матрица.

Я пытался использовать pylibtiff и PIL, но когда я загружаю их вместе с ними, матрица, которую он возвращает, пуста. Я читал во многих местах, что эти два инструмента поддерживают загрузку CCITT, но не доступ к пикселям.

Я открыт для преобразования изображения, пока я могу получить из него логическую матрицу и сделать это в коде Python. Сумасшедшая вещь в том, что если я открываю одно из своих изображений в краске, сохраняю его, не изменяя его, а затем пытаюсь загрузить его с помощью pylibtiff, это работает. Краска повторно сжимает это к сжатию LZW.

Таким образом, я предполагаю, что мой реальный вопрос: есть ли способ загрузить изображения CCITT в матрицы или конвертировать изображения в LZW с помощью python?

Спасибо

tylerthemiler

Ответы [ 2 ]

1 голос
/ 29 июля 2010

Кажется, лучший способ - не использовать Python целиком, а опираться на netpbm :

import Image
import ImageFile
import subprocess

tiff = 'test.tiff'
im = Image.open(tiff)
print 'size', im.size
try:
    print 'extrema', im.getextrema()
except IOError as e:
    print 'help!', e, '\n'

print 'I Get by with a Little Help from my Friends'
pbm_proc = subprocess.Popen(['tifftopnm', tiff],
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE)
(pbm_data, pbm_error) = pbm_proc.communicate()
ifp = ImageFile.Parser()
ifp.feed(pbm_data)
im = ifp.close()
print 'conversion message', pbm_error,
print 'extrema', im.getextrema()
print 'size', im.size
# houston: we have an image
im.show()

Похоже, уловка:

$ python g3fax.py 
size (1728, 2156)
extrema help! decoder group3 not available 

I Get by with a Little Help from my Friends
conversion message tifftopnm: writing PBM file
extrema (0, 255)
size (1728, 2156)
0 голосов
/ 29 июля 2010

Как насчет запуска tiffcp с subprocess для преобразования в LZW (-c lzw switch), затем обычная обработка с pylibtiff?В сети валяются версии Windows tiffcp.Не совсем Python-нативное решение, но все же ...

...