Color



  • class Color
    {
      public:
        int r, g, b;
        Color() { r = g = b = 0; }
    };
    

    Ich habe zwei 24-Bit Farben c1 und c2.
    Leider hat das RGB-Farbmodell ja die Eigenschaft, dass die drei Farbwerte einem relativ wenig darüber sagen, wie die Farbe "im Auge des Betrachters" aussieht. Zwei völlig unterschiedliche RGB-Kombinationen können quasi identisch aussehen.

    Bsp.:
    (0, 0, 0) ist natürlich schwarz, aber (17, 11, 15) hat ganz andere Zahlenwerte und sieht trotzdem direkt daneben noch fast genau gleich schwarz aus.

    Fraaaaaaaaaaaage: Gibt es eine Möglichkeit, wie ich die Unterschiede umrechnen kann in harten Zahlen (z. B. 0 ... 1000 Unterschiedsskala für SCHWARZ vs. WEISS)??

    Danke 😃



  • Schau doch in der Paint Farb-Palltte nach wenn du wissen willst welchen rgb wert eine Farbe hat.

    MfG Max



  • Hm, eigentlich gar keine so schlechte Idee, bin ich noch gar nicht drauf gekommen ...

    D. h., wenn ich also bei einem 640x480 Pixel großen Bild jeden einzelnen Farbwert vergleichen will, wären das 307.200 verschiedene Farben. Wenn ich jeden Pixel mit Copy-Paste in MS-Paint bringe, um mir dann die Farbwerte anzugucken, dann brauche ich dafür jedes mal ungefähr 9 Sekunden. Dann müsste ich aus den beiden RGB-Werten noch den "harten Differenzwert" ausrechnen, wenn ich das mit dem Taschenrechner mache, brauche ich dafür etwa 15 Sekunden. Das ist vielleicht nicht gerade schnell, aber immerhin muss ich dieses Tempo ja auch ein Weilchen durchhalten.
    Das macht dann also 33 Sekunden mal 307.200 Pixel ... das sind dann 16 Wochen, 5 Tage und 8 Stunden.

    OK, ich hätte gedacht, das dauert länger.

    Meine Frage war aber eigentlich auch, wie ich den "Differenzwert" ausrechen soll.

    Nichts für ungut, kleiner Scherz + vielen Dank 😃



  • Man könnte zB den "geometrischen Abstand" der Farben ausrechnen.

    Color c1, c2;

    abstand = wurzel( (c1.r-c2.r)² + (c1.g-c2.g)² + (c1.b-c2.b)² )

    Ich weiß jetzt nicht genau wie sinnvoll das ist, aber so würde ich es mal versuchen. Weiß und schwarz hätten dann eine Differenz von 0xffffff * wurzel(3). Wenn Dir das nicht gefällt kannst Du ja noch teilen.



  • Also du brauchst eine Metrik um die Abstände zwischen Farbern zu bestimmen? Dazu solltest du vielleicht erstmal sagen, wofür du das brauchst, denn es gibt viele Funktionen die so etwas
    erfüllen würden.

    z.b. Folgendes wäre schon eine:

    Abstand( c1, c2 )= 0 wenn c1 = c2
                      1 sonst
    

    Bye, TGGC (Der Held ist zurück)



  • Naja, wie gesagt, ich brauche diese Funktion, um den realen Unterschied zwischen zwei Farben ausdrücken zu können, z. B. in Werten von 0 ... 1000 -- siehe oben.

    Habe das Problem aber mittlerweile schon selbst gelöst.

    cu


Anmelden zum Antworten