用Python加载CCITT T.3压缩的tiff的最佳方法是什么?
我想在Python中加载一个使用CCITT T.3压缩的tiff图像,并从中获取像素矩阵。这个矩阵应该是一个逻辑矩阵。
我尝试过使用pylibtiff和PIL这两个工具,但用它们加载图像时,返回的矩阵是空的。我在很多地方看到说这两个工具支持加载CCITT格式,但却无法访问像素。
我愿意转换图像,只要能从中得到逻辑矩阵,并且能用Python代码实现。奇怪的是,如果我用画图打开我的某个图像,保存时不做任何修改,然后再用pylibtiff加载,它就能正常工作。因为画图会把它重新压缩成LZW格式。
所以我真正想问的是:有没有办法直接将CCITT格式的图像加载为矩阵,或者用Python把这些图像转换成LZW格式?
谢谢,
tylerthemiler
2 个回答
0
你可以试试用 subprocess
来运行 tiffcp
,这样可以把文件转换成 LZW 格式(用 -c lzw
这个选项),然后再用 pylibtiff
正常处理。网上有一些适用于 Windows 的 tiffcp
版本。虽然这不是完全用 Python 的方法,但也可以用。
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)