[Python, Numpy, PIL] Probleme bei der Bildgenerierung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
djtschke
User
Beiträge: 2
Registriert: Donnerstag 18. April 2013, 13:09

Hallo Zusammen,

ich stehe vor einem Problem das ich mir nicht ganz erklären kann:

Ich möchte aus einem zweidimensionalen Numpy Array mit dem PIL Modul ein Bilder erstellen.
Um das ganze zu testen bin ich erstmal im Kleinstbereich unterwegs, was heisst dass ich vorerst einen Bereich von 4x4 Pixel in ein
Bild schreib das eigentlich 600x700 Pixel groß ist.

Zu allererst habe ich mir ein leeres Numpy Array von der Größe 600x700 generiert.
In dieses schreibe ich dann für den 4x4 Pixelbereich unterschiedliche Farbwerte. Dies funktioniert wunderbar, was
ich über eine Ausgabe getestet habe:

70.0 Koordinaten: 0 0
69.0 Koordinaten: 0 1
69.0 Koordinaten: 0 2
66.0 Koordinaten: 0 3
69.0 Koordinaten: 1 0
69.0 Koordinaten: 1 1
70.0 Koordinaten: 1 2
66.0 Koordinaten: 1 3
68.0 Koordinaten: 2 0
70.0 Koordinaten: 2 1
67.0 Koordinaten: 2 2
67.0 Koordinaten: 2 3
67.0 Koordinaten: 3 0
66.0 Koordinaten: 3 1
67.0 Koordinaten: 3 2
64.0 Koordinaten: 3 3

Wenn ich nun das bild mit folgendem befehl erzeuge:

Code: Alles auswählen

myImage = pImage.fromstring('L', (myImageArray.shape[1], myImageArray.shape[0]), myImageArray.tostring())
werden im entstehenden bild für jeden Pixel 3 Grauwerte angezeigt und zwischen den Pixeln sind breite schwarze abstände.
Der gezeichnete Bereich verrgößert sich dadurch auch auf 32x25 statt 4x4 Pixel.

Es wäre toll wenn mir jemand weiterhelfen könnte!
Wenn der letzt Teil etwas unverständlich sein sollte kann ich noch ein Bild nachliefern.

Vielen Dank schon einmal!

Max
BlackJack

@djtschke: Versuch doch als erstes mal die `PIL.Image.fromarray()`-Methode. Und wenn Du unbedingt den Modus mit 'L' vorgeben willst, dann muss es sich um ein Array mit 8-Bit Werten handeln welches da übergeben wird und keine Gleitkommazahlen. Dafür haben `numpy`-Arrays die `astype()`-Methode. Du musst vorher natürlich dafür sorgen, dass Deine Werte sinnvoll in das Intervall 0 bis 255 abgebildet werden.
djtschke
User
Beiträge: 2
Registriert: Donnerstag 18. April 2013, 13:09

Yep, int8 was das Zauberwort. Der hat die 8bit Farbwerte als float eingelesen, das hat dann zu dem mist geführt.
Teufel mal wieder im Detail.

1000 Dank !!

LG

Max
Antworten