![]() |
ähnlichkeit von Farben - in eine Farbe wandeln
auf einem Foto z.B. von einem gelben Gegenstand sieht man ja nicht nur einen gelben Farbwert sondern ein ganzes Spektrum von gelben Farbtönen.
ich benötige jetzt eine Funktionen die alle gelben Farbtöne in eine einheitliche Farbe meiner Wahl konvertiert. Gibt es hier schön Lösungen für dieses Problem |
AW: ähnlichkeit von Farben - in eine Farbe wandeln
Ich hatte mal einiges zur Helligkeitsänderungen zusammengetragen:
![]() Vielleicht kannst Du in der Richtung mal etwas stöbern...? |
AW: ähnlichkeit von Farben - in eine Farbe wandeln
Farbe in RGB umwandeln
![]() Mit 3d Arithmetik den Abstand bestimmen: ![]() Alle Punkte mit Abstand < Schwellenwert sind "ähnlich". |
AW: ähnlichkeit von Farben - in eine Farbe wandeln
Mit RGB ist das unnötig schwer.
Du solltest deine Farben in den HSL- oder HSV-Farbraum konvertieren. Da kannst du dann den H(ue)-Wert (Das ist quasi die Farbe) einfach verändern und in RGB zurückwandeln. Dann hast du die Farbe geändert, aber die Helligkeit und Sättigung beibehalten. |
AW: ähnlichkeit von Farben - in eine Farbe wandeln
Zitat:
Jedoch sollte man beachten, dass bei sehr geringer Sättigung alle Farben grau aussehen, wobei "grau" irgend etwas zwischen schwarz und weiß ist. Vielleicht sollte man statt "grau" den Begriff "farblos" verwenden. Auch sollte beachtet werden, dass bei sehr geringer Helligkeit alle Farben schwarz aussehen. Somit ist der Hue-Wert nicht das alleinige Kriterium. |
AW: ähnlichkeit von Farben - in eine Farbe wandeln
Liste der Anhänge anzeigen (Anzahl: 2)
Ist nicht perfekt aber man muss halt etwas mit den Zahlen spielen:
Edit: Auf dem Thumbnail sieht es richtig gut aus, man darf nur nicht genau hingucken :mrgreen: Edit2: Beim Blauen hab ich nochmal etwas besser angepasst (zumindest was die Vasen selbst angeht - gibt leider immer noch etwas Kollateralschaden :mrgreen:) |
AW: ähnlichkeit von Farben - in eine Farbe wandeln
Ich weiß nicht inwiefern das hier noch eine Rolle spielt, aber die subjektiv empfundene Helligkeit hängt auch von der Farbe ab. Ich weiß schon gar nicht mehr wo das bei mir zum Einsatz kommt, aber ich habe noch das hier gefunden:
Delphi-Quellcode:
uses Vcl.Graphics, Winapi.Windows;
type TColorHelper = record helper for Vcl.Graphics.TColor public function getPerceptiveLuminance(): Single; end; function TColorHelper.getPerceptiveLuminance(): Single; begin Result := // Nach https://en.wikipedia.org/w/index.php?title=Relative_luminance&oldid=634803879 GetRValue(self) * 0.2126 + GetGValue(self) * 0.7152 + GetBValue(self) * 0.0722; end; |
AW: ähnlichkeit von Farben - in eine Farbe wandeln
mich würde der Code zum Vasenbild interessieren ? Machbar ?
|
AW: ähnlichkeit von Farben - in eine Farbe wandeln
Klar kann ich machen. Weil ich keine Lust hatte die Farbkonvertierung selbst zu schreiben (warum ist sowas nicht schon in Delphi drin? :() habe ich mir für die Konvertierung schnell was zusammengegoogelt, von daher keine Garantie auf den Teil:
Code zum Konvertieren von RGB<->HSB (HSL, HSV, HSB.. Alle mehr oder weniger das Gleiche, Hue ist das was wir in erster Linie brauchen und das ist überall gleich): ![]() Mein Code (Nur hässlicher Testcode für Inspiration, keine Copy&Paste-Qualität :mrgreen:)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var bmp: TBitmap; rgb: PRGBQuad; i,j: Integer; tmpColor: TColorRec; begin bmp := TBitmap.Create; try bmp.Assign(Image1.Picture.Bitmap); bmp.PixelFormat := pf32bit; for i := 0 to bmp.Height-1 do begin rgb := bmp.ScanLine[i]; for j := 0 to bmp.Width-1 do begin tmpColor := TColor(rgb^); // 175-190 ca. sind Gelbtöne. Und wenn mit einem Schwellenwert für die Sättigung kann man noch ein paar Graus rausfiltern if ((tmpColor.Hue >= 175) and (tmpColor.Hue <= 190)) and (tmpColor.Saturation > 0.15) then begin // Bei SetHue erwartet er komischerweise Werte von 0.0-1.0 statt 0-360.. // Mit SetHue wird nur der Farbton geändert, Sättigung und Helligkeit bleiben // Kannst dir da nen Wert zwischen 0 und 1 aussuchen: tmpColor.SetHue(0.1); rgb^ := TRGBQuad(TColor(tmpColor)); end; inc(rgb); end; end; Image2.Picture.Bitmap := bmp; finally bmp.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz