2010-07-28 4 views
2

J'essaye de charger un tiff CCITT T.3 compressé dans python, et obtenir la matrice de pixel de lui. Ce devrait juste être une matrice logique.Quelle est la meilleure façon de charger un tiff compressé CCITT T.3 en utilisant python?

J'ai essayé d'utiliser pylibtiff et PIL, mais quand je le charge avec eux, la matrice qu'il retourne est vide. J'ai lu dans beaucoup d'endroits que ces deux outils supportent le chargement du CCITT mais pas l'accès aux pixels.

Je suis ouvert à la conversion de l'image, tant que je peux obtenir la matrice logique et le faire en code python. La chose folle est que si j'ouvre une de mes images en peinture, enregistrez-la sans la modifier, puis essayez de la charger avec pylibtiff, cela fonctionne. La peinture le compresse de nouveau à la compression LZW.

Donc, ma vraie question est: Y at-il un moyen de charger nativement des images CCITT en matricies ou de convertir les images en LZW en utilisant python ??

Merci,

tylerthemiler

Répondre

1

Il semble que la meilleure façon est de ne pas utiliser Python entièrement mais maigre sur 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() 

semble faire l'affaire:

$ 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

Que diriez-vous en cours d'exécution avec tiffcpsubprocess pour convertir en LZW (-c lzw switch), puis processus normalement avec pylibtiff? Il existe des versions Windows de tiffcp qui traînent sur le Web. Pas exactement solution Python natif, mais quand même ...

+0

J'ai essayé tiffcp, alors que ça s'est bien converti, l'image ne s'est toujours pas chargée correctement ... Je ne savais pas que vous pouviez convertir en lzw bien ... Je vais essayer ... pouvez-vous me donner le syntaxe?? – tylerthemiler

+0

@tylerthemiler, pas de syntaxe particulière, juste 'tiffcp -c lzw from.tiff to.tiff'. Et la réponse de msw a l'exemple de l'utilisation de 'subprocess'. – Constantin

Questions connexes