我正在尝试将CCITT T.3压缩的tiff加载到python中,并从中获取像素矩阵。它应该只是一个逻辑矩阵。
我尝试过使用pylibtiff和PIL,但是当我用它们加载它时,它返回的矩阵是空的。我已经在很多地方读过这两个工具支持加载CCITT而不是访问像素。
我愿意转换图像,只要我可以从中获取逻辑矩阵并在python代码中执行。疯狂的是,如果我在油漆中打开我的一个图像,保存它而不改变它,然后尝试用pylibtiff加载它,它的工作原理。油漆将其重新压缩为LZW压缩。
所以我想我真正的问题是:有没有办法将CCITT图像原生加载到matricies或使用python将图像转换为LZW?
谢谢,
tylerthemiler
答案 0 :(得分:1)
似乎最好的方法是不要完全使用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)
答案 1 :(得分:0)
如何tiffcp
与subprocess
一起转换为LZW(-c lzw
切换),然后使用pylibtiff
正常处理?网络上有tiffcp
的Windows版本。不完全是Python原生的解决方案,但仍然......