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!
RGB wert zu Farben
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.
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.
(''Quelle: https://www.compuphase.com/cmetric.htm'')
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)