2010-01-23 12 views
33

Wie kann ich den Farbraum meines Bildes mit openCV sehen?Ermitteln des Farbraums mit openCV

Ich möchte sicher sein, es RGB ist, bevor zu einem anderen zu konvertieren cvCvtColor() -Funktion

dank

+0

Ich sehe unten, dass Sie die Bilder von einem Telefon ziehen. In welchem ​​Format sind sie? Es hört sich nicht mehr so ​​an, als würden Sie tatsächliche 'IplImage'-Strukturen ziehen - wie bekommen Sie die Bilder in OpenCV? – ezod

+0

sogar ich frage mich, ob die Bilder, die ich von meiner Webcam nehme, als RGB oder BGR gespeichert werden? (Hast du zufälligerweise zufällig deine Lösung gefunden?) –

Antwort

17

Leider OpenCV bietet keine Art von Hinweis auf den Farbraum in der IplImage-Struktur, also wenn Sie blind ein IplImage von irgendwo abholen, gibt es einfach keine Möglichkeit zu wissen, wie es codiert wurde. Außerdem kann Ihnen kein Algorithmus definitiv sagen, ob ein Bild als HSV vs. RGB interpretiert werden soll - es sind nur ein paar Bytes zur Maschine (sollte this HSV oder RGB sein?). Ich empfehle Ihnen, Ihre IplImages in eine andere Struktur (oder sogar eine C++ - Klasse mit Vorlagen!) Zu packen, um Ihnen zu helfen, diese Informationen zu verfolgen. Wenn Sie wirklich verzweifelt sind und nur mit einer bestimmten Art von Bildern (Außenaufnahmen, Büros, Gesichtern usw.) zu tun haben, könnten Sie versuchen, Statistiken über Ihre Bilder zu erstellen (zB Histogrammstatistiken für natürliche RGB - Bilder und einige für natürliche HSV-Bilder) und versuchen Sie dann, Ihr völlig unbekanntes Bild zu klassifizieren, indem Sie vergleichen, mit welchem ​​Farbraum Ihr Bild näher ist.

+0

danke, also werden diese Bilder von einem Smartphone mit Google Android gemacht. Ich nehme an, das sind RGB-Bilder, stimmt das? RGB ist der häufigste Farbraum richtig? thanks – aneuryzm

+2

Noch einmal, es gibt wirklich keine Möglichkeit zu sagen, ohne tatsächlich die Bilder anzuzeigen, aber ich denke, dass RGB eine ziemlich sichere Annahme ist - es ist, was die meisten Leute denken, wenn sie über einen Dreikanal-Farbraum sprechen. Ich wäre ziemlich überrascht, wenn es etwas anderes wäre. – rcv

3

Die IplImage struct hat ein Feld namens colorModel bestehend aus 4 Zeichen. Leider ignoriert OpenCV dieses Feld. Sie können dieses Feld jedoch verwenden, um verschiedene Farbmodelle zu verfolgen.

6

txandi macht einen interessanten Punkt. OpenCV hat einen BGR-Farbraum, der standardmäßig verwendet wird. Dies ist ähnlich dem RGB-Farbraum, außer dass die B- und R-Kanäle im Bild physisch umgeschaltet werden. Wenn die Reihenfolge der physischen Kanäle für Sie wichtig ist, müssen Sie Ihr Bild mit dieser Funktion konvertieren: cvCvtColor (defaultBGR, imageRGB, CV_BGR2RGB).

2

Wie Boatzart sagte, gibt es keine Methode, um programmatisch den Farbraum zu erfassen, indem die drei Farbkanäle inspizieren, es sei denn, Sie a priori Kenntnis des Bildinhaltes (zB gibt es eine Markierung in dem Bild, dessen Farbe bekannt). Wenn Sie Bilder aus unbekannten Quellen akzeptieren, müssen Sie dem Benutzer erlauben, den Farbraum seines Bildes anzugeben. Ein guter Standard wäre, RGB anzunehmen.

Wenn Sie eine der Pixelfarben vor der Anzeige ändern und einen Nicht-OpenCV-Viewer verwenden, sollten Sie wahrscheinlich cvCvtColor(src,dst,CV_BGR2RGB) verwenden, nachdem Sie alle Farbfilter ausgeführt haben. Wenn Sie OpenCV für den Viewer verwenden oder die Bilder in einer Datei speichern, sollten Sie sicherstellen, dass sie sich im BGR-Farbraum befinden.

Verwandte Themen