Frage

Wie kann ich den Farbraum meines Bildes sehen mit OpenCV?

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

Dank

War es hilfreich?

Lösung

Leider ist OpenCV bietet keine Art von Hinweis auf den Farbraum in der IplImage Struktur, also wenn Sie blind eine IplImage von irgendwo abholen gibt es einfach keine Möglichkeit zu wissen, wie es kodiert wurde. Darüber hinaus kann kein Algorithmus Ihnen definitiv sagen, ob ein Bild sollte als HSV vs. RGB interpretiert werden - es ist alles nur ein Haufen von Bytes an die Maschine (sollte diese HSV oder RGB sein?). Ich empfehle Ihnen, Ihre IplImages in einer anderen Struktur wickeln (oder sogar eine C ++ Klasse mit Vorlagen!) Sie den Überblick über diese Informationen, um zu helfen. Wenn du bist wirklich verzweifelt und man es zu tun nur mit einer bestimmten Art von Bildern (Szenen im Freien, Büros, Gesichter, etc.) Sie könnten versuchen, einige Statistiken über Ihre Bilder Berechnung (zB Build Histogrammstatistiken für natürliche RGB-Bilder und einige für natürlicher HSV Bilder), und versuchen Sie dann völlig unbekanntes Bild zu klassifizieren durch Vergleich, welcher Farbraum Ihres Bild näher an.

Andere Tipps

txandi macht einen interessanten Punkt. OpenCV hat einen BGR-Farbraum, die standardmäßig verwendet wird. Dies ist vergleichbar mit dem RGB-Farbraum der Ausnahme, daß die B- und R-Kanäle werden in dem Bild physisch geschaltet. Wenn die physische Kanal-Reihenfolge für Sie wichtig ist, müssen Sie Ihr Bild mit dieser Funktion konvertieren. CvCvtColor (defaultBGR, imageRGB, CV_BGR2RGB)

Der IplImage struct hat ein Feld namens colorModel bestehend aus 4 Zeichen. Leider ignoriert OpenCV dieses Feld. Aber Sie können dieses Feld verwenden, den Überblick über verschiedene Farbmodelle zu halten.

Wie RCV sagte, gibt es keine Methode, um programmatisch zu erkennen der Farbraum durch die drei Farbkanäle inspizieren, es sei denn, Sie haben a priori Wissen des Bildinhaltes (zB gibt es eine Markierung in dem Bild, dessen Farbe bekannt ist). Wenn Sie Bilder aus unbekannten Quellen zu akzeptieren werden, müssen Sie dem Benutzer erlauben, den Farbraum ihres Bildes angeben. Ein guter Standard wäre RGB zu übernehmen.

Wenn Sie eine der Pixelfarben vor der Anzeige ändern, und Sie werden mit einem nicht-OpenCV-Viewer, sollten Sie wahrscheinlich cvCvtColor(src,dst,CV_BGR2RGB) verwenden, nachdem Sie alle Ihre Farbfiltern beendet haben laufen. Wenn Sie OpenCV für den Betrachter verwenden oder werden die Bilder aus, um Datei werden speichern, sollten Sie sicherstellen, dass sie in der BGR-Farbraum sind.

ich teile grundsätzlich die Kanäle und jeden aus dem Farbraum des Bildes Figur angezeigt Ich verwende. Es ist vielleicht nicht der beste Weg sein, aber es funktioniert für mich.

Für detaillierte Erklärung, können Sie die folgenden Link verweisen.

https://dryrungarage.wordpress.com/2018/ 11.03 / Bildverarbeitungs-basics /

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top