Heim >Backend-Entwicklung >C++ >Wie finde ich die beste Farbübereinstimmung in einem Array?
So vergleichen Sie Farbobjekte und ermitteln die größtmögliche Übereinstimmung in einer Reihe von Farben
Das Verständnis der Farbabstände kann für Aufgaben wie die Farbauswahl von entscheidender Bedeutung sein und Bildbearbeitung. Obwohl es keine definitive Definition des Farbabstands gibt, können verschiedene Methoden zu seiner Messung eingesetzt werden.
1. Nur Farbtonvergleich
Diese Methode konzentriert sich ausschließlich auf die Farbtonkomponente der Farbe und ignoriert Sättigung und Helligkeit. Hier ist die Umsetzung:
int closestColor1(List<Color> colors, Color target) { var hue1 = target.GetHue(); var diffs = colors.Select(n => getHueDistance(n.GetHue(), hue1)); var diffMin = diffs.Min(n => n); return diffs.ToList().FindIndex(n => n == diffMin); } float getHueDistance(float hue1, float hue2) { float d = Math.Abs(hue1 - hue2); return d > 180 ? 360 - d : d; }
2. RGB-Abstand
Diese Methode misst den direkten Abstand zwischen Farben im RGB-Raum:
int closestColor2(List<Color> colors, Color target) { var colorDiffs = colors.Select(n => ColorDiff(n, target)).Min(n => n); return colors.FindIndex(n => ColorDiff(n, target) == colorDiffs); } int ColorDiff(Color c1, Color c2) { return (int)Math.Sqrt((c1.R - c2.R) * (c1.R - c2.R) + (c1.G - c2.G) * (c1.G - c2.G) + (c1.B - c2.B) * (c1.B - c2.B)); }
3. Gewichteter Abstand
Diese Methode berücksichtigt Farbton, Sättigung und Helligkeit mit anpassbaren Gewichtungen:
int closestColor3(List<Color> colors, Color target) { float hue1 = target.GetHue(); var num1 = ColorNum(target); var diffs = colors.Select(n => Math.Abs(ColorNum(n) - num1) + getHueDistance(n.GetHue(), hue1) ); var diffMin = diffs.Min(x => x); return diffs.ToList().FindIndex(n => n == diffMin); } float ColorNum(Color c) { return c.GetSaturation() * factorSat + getBrightness(c) * factorBri; } float getBrightness(Color c) { return (c.R * 0.299f + c.G * 0.587f + c.B *0.114f) / 256f; }
Um diese Methoden zu verwenden, konvertieren Sie Ihr Farbarray in ein List
Die optimale Methodenwahl hängt von der spezifischen Anwendung und davon ab, welcher Farbaspekt am relevantesten ist.
Das obige ist der detaillierte Inhalt vonWie finde ich die beste Farbübereinstimmung in einem Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!