Maison >développement back-end >C++ >Comment trouver la correspondance de couleur la plus proche dans un tableau ?
Comment comparer des objets de couleur et déterminer la correspondance la plus proche dans un tableau de couleurs
Comprendre les distances de couleurs peut être crucial pour des tâches telles que la sélection des couleurs et le traitement d'images. Bien qu'il n'existe pas de définition définitive de la distance des couleurs, plusieurs méthodes peuvent être utilisées pour la mesurer.
1. Comparaison de teinte uniquement
Cette méthode se concentre uniquement sur la composante de teinte de la couleur, en ignorant la saturation et la luminosité. Voici la mise en œuvre :
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. Distance RVB
Cette méthode mesure la distance directe entre les couleurs dans l'espace RVB :
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. Distance pondérée
Cette méthode prend en compte la teinte, la saturation et la luminosité, avec des poids personnalisables :
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; }
Pour utiliser ces méthodes, convertissez votre tableau de couleurs en un tableau Liste
Le choix de la méthode optimale dépend de l'application spécifique et de l'aspect de la couleur le plus pertinent.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!