Python PIL kämpft mit unkomprimierten 16-Bit-TIFF-Bildern

8

Mein System ist Mac OS X 10.8.2. Ich habe mehrere 2560 x 500 unkomprimierte 16-Bit-TIFF-Bilder (Graustufen, vorzeichenlose 16-Bit-Ganzzahlen). Ich versuche zuerst, sie mit PIL (installiert über Homebrew, Version 1.7.8) zu laden:

%Vor%

Die negativen Werte sind um 65.536 ... wahrscheinlich kein Zufall.

Wenn ich vorhabe, Pixel zu ändern und über PIL wieder zum TIFF-Bild zurückzukehren (indem ich das Array einfach als Bild zurücksetze):

%Vor%

Ich bekomme Fehler:

%Vor%

Ich kann Image.fromarray() in der PIL-Dokumentation nicht finden. Ich habe versucht, über Image.fromstring() zu laden, aber ich verstehe die PIL-Dokumentation nicht und es gibt wenig Beispiele.

Wie im obigen Code gezeigt, scheint PIL die Daten als I;16B zu "erkennen". Was ich von den PIL-Dokumenten erkennen kann, ist der Modus I :

%Vor%

Offensichtlich ist das nicht korrekt.

Ich finde viele Artikel auf SX, die darauf hindeuten, dass PIL keine 16-Bit-Bilder unterstützt. Ich habe Vorschläge gefunden, um pylibtiff zu verwenden, aber ich glaube, das ist nur Windows?

Ich suche nach einer "leichten" Möglichkeit, mit diesen TIFF-Bildern in Python zu arbeiten. Ich bin überrascht, dass es so schwierig ist, und das lässt mich glauben, dass das Problem für andere offensichtlich ist.

    
ph0t0n 08.03.2013, 00:30
quelle

2 Antworten

8

Es stellt sich heraus, dass Matplotlib unkomprimierte 16-Bit-TIFF-Bilder in zwei Codezeilen verarbeitet:

%Vor%

Et voila. Ich denke, das entspricht nicht meinen Anforderungen als "leicht", da Matplotlib (für mich) ein schweres Modul ist, aber es ist spektakulär einfach, das Bild in ein Numpy-Array zu bekommen. Ich hoffe, dass dies jemand anderen hilft, schnell eine Lösung zu finden, da dies für mich nicht offensichtlich war.

    
ph0t0n 08.03.2013, 11:32
quelle
4

Probieren Sie Pillow , die "freundliche" PIL-Gabel. Sie haben vor kurzem eine bessere Unterstützung für 16- und 32-Bit-Bilder einschließlich der numpy-Array-Schnittstelle hinzugefügt. Dieser Code wird mit dem neuesten Kissen funktionieren:

%Vor%     
Jeremy Muhlich 14.02.2014 16:04
quelle