PIL Bild drehen Farben (BGR -> RGB)
Habe ich ein Bild, wo die Farben sind in der BGR. Wie kann ich mich verwandeln PIL mein Bild zu tauschen, die B-und R-Elemente der einzelnen pixel in einer effizienten Art und Weise?
Kannst du bitte wählen Sie die Antwort von @martin-beckett
InformationsquelleAutor Claudiu | 2011-01-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, es ist kein alpha-band, ist es nicht so einfach?
Edit:
Hmm... Es scheint PIL hat ein paar bugs in dieser Hinsicht...
im.split()
scheint nicht zu funktionieren mit aktuellen Versionen von PIL (1.1.7). Es kann (?) noch 1.1.6, obwohl...np.roll
könnte den trick tundie Lösung war, laden Sie das Bild ordnungsgemäß in den ersten Platz haben =P aber das scheint schön
np.roll
ist Super, danke.np.roll
konvertieren BGR, RBG, nicht RGB. Wenn Sie dies tun wollen, in numpy, können Siedata[...,[2,1,0]]
vertauschen der Kanäle. Aber wenn Sie bereits mit OpenCV oder PIL, gehen Sie einfach mit der Martin-Beckett ' s Antwort.diese Antwort ist falsch, die Frage ist, rgb-> bgr,....
InformationsquelleAutor Joe Kington
Nur um eine mehr up-to-date die Antwort:
Mit der neuen cv2-Schnittstelle geladenen Bilder sind jetzt numpy-arrays automatisch.
Aber openCV cv2.imread() lädt die Bilder wie die BGR während numpy.imread() lädt Sie als RGB.
Der einfachste Weg zu konvertieren, ist die Verwendung von openCV cvtColor.
Warum ist das nicht oben ?
Weil die einfachste Lösung ist buchstäblich genau das: img = img[..., ::-1]
Tut cv2 garantieren, dass die Bilder wieder zusammenzusetzen? OpencCV (zumindest in c++) beginnen Sie jeden neuen Zeile auf einer 4byte-Grenze, so dass Sie müssen vorsichtig sein, bewegen raw-bytes um
vielen Dank für diese...ich bin mit Ihnen in den gleichen codes,hat mich verrückt für eine Weile@RyanSoklaski, dass ist eigentlich eher verwirrend, ohne zu wissen, was Standard für opencv oder PIL, aber sehr ordentlich
InformationsquelleAutor Martin Beckett
Ich weiß, es ist eine alte Frage, aber ich hatte das gleiche problem und löste es mit:
Die Daten hat 3 Dimensionen: Breite, Höhe und Farbe.
::-1
effektiv kehrt die Reihenfolge der Farben. Die Breite und Höhe sind nicht betroffen.Gut, ich habe es nach deinem Hinweis und meiner Prüfung.
::-1
ist eigentlich eine Kurzform von numpy Betrieb[start:end:step]
, undstart
/end
entschieden wird, automatisch.für Klarheit, img = img[:, :, : :-1] entspricht img = img[:, :, [2,1,0]]. Ich denke letzteres ist besser, da ist es eindeutiger.
img[:, :, : :-1] ist nicht gleich img[:, :, [2,1,0]]. Der ehemalige nutzt basic index und die letztere verwendet eine erweiterte Indizierung. Letzteres wird eine Kopie Ihres Bildes, während die ehemaligen nicht.
InformationsquelleAutor Peter9192
Dies war meine beste Antwort. Dies bedeutet, durch die Art und Weise, arbeiten mit Alpha zu.
InformationsquelleAutor sberry
Genau zu klären, Martin Beckets Lösung, wie ich bin nicht in der Lage, sich zu äußern.
Sie müssen cv2. vor der Farbe konstant.
danke, Claudiu, ich werde versuchen, dass: """Änderungen müssen mindestens 6 Zeichen lang sein; gibt es sonst noch etwas zu verbessern, in diesem Beitrag?""" Gut, dass nicht so gut 😉
InformationsquelleAutor user2692263
Mit Hilfe der Ideen erklärt, bevor... mit numpy Sie konnte.
Zusätzlich kann es entfernen Sie den Alpha-Kanal.
InformationsquelleAutor BlaZerTech
InformationsquelleAutor Andrei Antonov
Sollten Sie in der Lage, dies zu tun mit der
ImageMath
Modul.Edit:
Joe ' s Lösung ist noch besser, ich war overthinking. 🙂
InformationsquelleAutor Amber