Um zwischen verschiedenen Farbräumen zu konvertieren, müssen Sie cvtColor verwenden. Um von BGR nach YCC zu gelangen, sollten Sie den Parameter CV_BGR2YCrCb
übergeben (und zurückgehen ist CV_YCrCb2BGR
). Die korrekte Verwendung ist:
cvtColor(src, dest, CV_BGR2YCrCb)
Wo src
Quellrahmen ist, und dest
Ihre bearbeiteten Rahmens sein wird (die Sie gerade setzen könnte src
hier für sie die Änderung an seinem Platz zu tun).
cvSplit
ist nicht das, was Sie dafür brauchen, da es einfach ein Multi-Channel-Array in mehrere Single-Channel-Arrays (seine Komponenten) aufteilt. Wenn Sie also einen BGR-Videoframe haben, kann cvSplit
Ihnen nur die B-, G-, R-Kanäle isoliert zur Verfügung stellen.
Wenn Sie den Y-Kanal in Isolation verarbeiten Sie Farbraum konvertieren konnte, und dann aufgeteilt und dann wieder zusammenführen, wie folgt aus:
cvtColor(frame, frame, CV_BGR2YCrCb)
cvSplit(frame, Y, Cr, Cb, NULL)
#Process the Y channel here.
cvMerge(Y, Cr, Cb, NULL, frame)
cvtColor(frame, frame, CV_YCrCb2BGR)
Wenn Sie nur die Helligkeit des Bildes erhöhen wollen, Ein einfacherer Weg (Sie müssen keine Luminanz verwenden) besteht darin, jedem Kanal einen Skalierer hinzuzufügen:
cvAddS(frame, cvScalar(30,30,30), frame)
Vielen Dank für die Antwort. Muss cvSplit BGR in Ordnung sein? Und ich muss etwas auf der Luminanz tun, also konvertiere ich von BGR2YCrCb dann benutze cvSplit danach muss ich cvMerge verwenden, um die Luminanz (schon etwas auf der Luminanz gemacht), Cr und Cb zurück zu verschmelzen. Nach der Zusammenführung wird mit YCrCb2BGR wieder in BGR konvertiert. Daher habe ich Probleme beim Bestimmen der richtigen Reihenfolge des Zusammenführens der Leuchtdichte, Cr und Cb. Sollte es sein: >> cvMerge (temp_y, cr, cb, 0, Luma) oder >> cvMerge (temp_y, cb, cr, 0, Luma) weil beide unterschiedliche Ausgabebild geben. – Mzk
@ Mizuki Kai - Die Reihenfolge ist wichtig. Ohne deinen Code zu sehen, weiß ich nicht, was du falsch machst. Aber ich habe meine Antwort aktualisiert, um zu veranschaulichen, dass Sie Dinge tun können. Auch die [documentarion] (http://opencv.willowgarage.com/documentation/python/core_operations_on_arrays.html?highlight=split#Split) für opencv ist wirklich gut und eine Beratung wert. – fraxel
Das heißt, da wir wissen, dass openCV BGR2YCrCb verwendet, sollte die Reihenfolge so sein: cvMerge (Y, Cr, Cb, NULL, Frame); folge einfach der Bestellung ist ausreichend.Am ich richtig? – Mzk