Seite 1 von 1
RGB wert zu Farben
Verfasst: Montag 5. Oktober 2020, 18:35
von Traver
Hallo liebes Python-Forum,
ich habe ein Problem, dessen Lösung ich leider nicht finde.
Ich will die 3 RGB Werte zu einer Farbe berechnen lassen (d.h wenn die RGB Werte eine Farbe anzeigen würden, die grün-gelblich ist aber ein ganz kleines bisschen grüner, würde das Programm: 'green' returnen).
Brauche das für die Bildbearbeitung.
Als Frage nun:
Gibt es dazu ein Modul, um das zu berechnen, oder kann man das überhaupt berechnen?
ich arbeite derzeit mit matplotlib.pyplot.imread() habe mir aber auch schon ein bisschen opencv angeguckt.
Vielen dank schon mal für alle Antworten!
Re: RGB wert zu Farben
Verfasst: Montag 5. Oktober 2020, 18:57
von Sirius3
Man braucht ja nur irgendein Abstandsmaß, und dann nimmt man die Farbe, die dem RGB-Wert am nächsten liegt.
Re: RGB wert zu Farben
Verfasst: Montag 5. Oktober 2020, 19:01
von Traver
Aber was für ein Abstandsmaß? RGB sind ja eigentlich nur die mengen von den Farben Rot, Grün und Blau (dessen Licht oder Wellen waren glaube ich).
Re: RGB wert zu Farben
Verfasst: Montag 5. Oktober 2020, 19:09
von Sirius3
Je nachdem, was für Dich die ähnlichste Farbe ist. Das einfachste wäre der quadratische Abstand zu R, G und B. Wenn Dir aber die Helligkeit oder Sättigung bei "Grün" egal ist, wäre eine Konvertierung in HSV besser, weil dann z.B. H niedriger gewichtet werden kann.
Re: RGB wert zu Farben
Verfasst: Montag 5. Oktober 2020, 20:20
von __deets__
Alternativ der LAB-Farbraum, dessen Distanz ist da AFAIK besser für sowas.
Re: RGB wert zu Farben
Verfasst: Montag 5. Oktober 2020, 20:40
von nezzcarth
Das Berechnen von Abständen zwischen Farben (bzw. Farben und Farbräume generell) sind eine Wissenschaft für sich (s. z.B.:
https://en.wikipedia.org/wiki/Color_difference). Das liegt halt unter anderen daran, dass Farben neben der physikalischen Komponente auch eine physiologische und eine psychologische haben. Mathematisch kann man den Abstand zwischen zwei Farben in RGB zwar leicht z.B. über die euklidische Distanz bestimmen, aber das bedeutet nicht, dass das auch der wahrgenommenen Ähnlichkeit entspricht. Bei RGB hat man auch zusätzlich noch das Problem, dass das eigentlich Geräte-abhängig ist, im Gegensatz zum Beispiel zu dem von deets vorgeschlagenen LAB.
Code: Alles auswählen
from math import sqrt
def euclidean_weighted(first, second):
r = (first[0] + second[0]) / 2
return sqrt((2 + (r/256)) * (first[0] - second[0])**2 + 4 * (first[1]-second[1])**2 + (2 + ((255-r)/256))*(first[2]-second[2])**2)
(''Quelle:
https://www.compuphase.com/cmetric.htm'')