RGB wert zu Farben

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Traver
User
Beiträge: 9
Registriert: Dienstag 16. Juni 2020, 13:43

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!
Sirius3
User
Beiträge: 18220
Registriert: Sonntag 21. Oktober 2012, 17:20

Man braucht ja nur irgendein Abstandsmaß, und dann nimmt man die Farbe, die dem RGB-Wert am nächsten liegt.
Traver
User
Beiträge: 9
Registriert: Dienstag 16. Juni 2020, 13:43

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).
Sirius3
User
Beiträge: 18220
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Alternativ der LAB-Farbraum, dessen Distanz ist da AFAIK besser für sowas.
nezzcarth
User
Beiträge: 1734
Registriert: Samstag 16. April 2011, 12:47

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'')
Antworten