Dimensionen eines floattensors tauschen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Hillson
User
Beiträge: 22
Registriert: Dienstag 15. Mai 2018, 08:36

Moin,

ich lese .jpg Bilder über Images.Open() ein und danach transformiere ich sie. Sie sind danach vom type torch.floattensor. Nach der Transformation würde ich mir die Bilder aber gerne nochmal anschauen.

Ich habe versucht den torch.floattensor in ein numpy array umzuwandeln und dieses dann über imshow() aus der matplotlib anzuzeigen. Dabei bekomme ich aber folgende Fehlermeldung:
TypeError: Invalid dimensions for image data

Ich habe jetzt mal im Internet geschaut und versucht rauszubekommen was das mit der Dimension auf sich hat. Dabei habe ich gefunden, dass imshow() das Bild wohl im Format (Höhe, Breite, 3) braucht. (Für ein RGB Bild) Mein transformiertes Bild also der floattensor befindet sich aber in dem Format (3,Höhe,Breite).

Wie ich nun den floattensor von (3,Höhe,Breite) zu (Höhe, Breite, 3) bekomme, konnte ich leider nirgends finden.

Ich würde mich darüber freuen wenn mir jemand eine Anregung oder einen Hinweis bezüglich der Umwandlung geben könnte. Falls jemand eine andere Idee hat die Bilder nach der Transformation wiederzugeben bin ich dafür auch offen.

Mit freundlichen Grüßen
narpfel
User
Beiträge: 644
Registriert: Freitag 20. Oktober 2017, 16:10

Moin,

macht `np.transpose` mit `axes=(1, 2, 0)` was du suchst?
Hillson
User
Beiträge: 22
Registriert: Dienstag 15. Mai 2018, 08:36

Danke narpfel.

Jetzt habe ich das numpy array in den Format (Höhe, Breite, 3) und bekomme auch keinen Fehler mehr von imshow(). Nur zeigt er mir trotzdem nichts an. Also es öffnet sich nicht mal ein weiße Fenster oder so.

Code: Alles auswählen

	img = Image.open('Images/' + f)
   	img_tensor = transform(img)
    	img_tensor = img_tensor.numpy()
    	img_tensor= np.transpose(img_tensor,(1,2,0))
    	plt.imshow(img_tensor)
    	
Das ist der Code den ich dazu habe. f ist der Dateiname eines Bildes, welcher vorher ausgewählt wird. Wüsste jetzt nicht was noch fehlt, dass das transformierte Bild auch angezeigt wird :?:
narpfel
User
Beiträge: 644
Registriert: Freitag 20. Oktober 2017, 16:10

Was passiert, wenn du danach `plt.show` aufrufst?

Dateinamen mit `+` zusammenzubasteln gilt als schlechter Stil. Je nach Pythonversion solltest du dir entweder `pathlib` (seit Python 3.4) oder `os.path` angucken.
Hillson
User
Beiträge: 22
Registriert: Dienstag 15. Mai 2018, 08:36

vielen Dank, das hat jetzt funktioniert und danke für die Hinweise. Ich werde mir das mal anschauen.
Antworten