32bit Image mit Opencv2 öffnen

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
kl.feigling89
User
Beiträge: 42
Registriert: Montag 24. Februar 2014, 14:47

Hallo Community,
ich habe leider das Problem, dass ich mit der OpenCV library kein Bild mit 32bit tiefe laden kann.

Code: Alles auswählen

image = cv2.imread('yellowgrey.png',-1)
print image.shape, image.dtype
Das Bild wird zwar geladen, weißt jedoch erhebliche Fehler auf. Zum Beispiel werden stellen gefärbt die normalerweise Weiß sein sollten.
Außerdem wird es sofort als 8bit Bild konvertiert.

Ich möchte es zwar gerne später in 8bit, jedoch ohne die Fehler.
Habe im Internet für die Funktion dies gefunden:

Code: Alles auswählen

CV_LOAD_IMAGE_ANYDEPTH 
Finde aber nirgends wie man dies verwendet.

Werde späte mal ein Beispielbild hochladen.
BlackJack

@kl.feigling89: Bei einem 32-Bit-PNG hat man ein RGBA-Bild mit 8 Bit pro Kanal. 32-Bit pro Kanal kann das Format überhaupt nicht. Wenn Du also so ein 32-Bit-PNG lädst, dann ist ein `dytpe` mit 8 Bit völlig normal und da wurde auch nichts umgerechnet oder umgewandelt.

Ob der Alphakanal noch da ist oder nicht, solltest Du am `shape` sehen, ob die dritte Achse drei oder vier Elemente lang ist.

`CV_LOAD_IMAGE_ANYDEPTH` ist ein Flag-Wert für das zweite Argument der `imread()`-Funktion. Da wo Du -1 übergeben hast.

Was die falschen Farben angeht: Kann das der Alphakanal sein?
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Ich erinnere mich, dass man irgendwo noch den Typ der Daten angeben muss.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
BlackJack

@darktrym: Da sagt die Dokumentation etwas anderes.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Doch, da wo die -1 steht:
CV_LOAD_IMAGE_UNCHANGED (<0) loads the image as is (including the alpha channel if present)
CV_LOAD_IMAGE_GRAYSCALE ( 0) loads the image as an intensity one
CV_LOAD_IMAGE_COLOR (>0) loads the image in the RGB format
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
BlackJack

@darktrym: Unter Typ hätte ich jetzt das Bildformat verstanden. Wobei ich jetzt nicht weiss was Du mit der Anmerkung sagen wolltest, denn die -1 *steht* da ja, und ist laut Doku auch der Wert den man haben möchte.
Antworten