Comment puis-je déterminer si une couleur est plus proche de le blanc ou le noir?
Je fais affaire avec les tons de la peau et voulez savoir si une personne de ton de la peau est plus proche du blanc ou du noir.
Donc donné un couleur, comment peut-on déterminer si elle est plus proche du blanc, du ton de la peau ou un noir?
J'ai essayé quelques noobish algorithmes, personne ne sait comment je peux faire cela?
Dans le RGB monde, le blanc est 255,255,255 et noir est 0,0,0. Il semblerait que vous pourriez juste faire la moyenne de trois et de déterminer si le résultat est proche de 0 (noir) et 255 (blanc).
Oui j'ai essayé cette moyenne dans une de mes "noobish" des solutions, mais il ne fonctionne pas bien.
Oui j'ai essayé cette moyenne dans une de mes "noobish" des solutions, mais il ne fonctionne pas bien.
OriginalL'auteur Aziz | 2012-03-20
Vous devez vous connecter pour publier un commentaire.
Je dirais que vous pouvez d'abord convertir la couleur en échelle de gris et de vérifier ensuite si c'est plus proche de noir ou de blanc.
D'abord convertir la valeur de couleur RVB pour calculer la luminance par la formule suivante
Ensuite, vérifiez si la valeur est plus proche de 0 ou 255 et choisir en noir ou en blanc en conséquence
L'esprit que cela fonctionne bien si la couleur de l'espace n'est pas gamma compressé, sinon, vous devrez ajouter une étape avant le calcul de la luminance qui est un gamma expansion, calculer Y, puis d'effectuer une gamma compression pour obtenir un non-linéaire de la valeur de luminance que vous pouvez ensuite utiliser pour décider si la couleur est plus proche de noir ou de blanc.
Vous ne pouvez pas tester pour s'gamma compression est présent ou pas. Vous devez les connaître à l'avance, ce que gamma compression t-il "de linarize" valeurs RVB avec une fonction de puissance, si ce est fait sur votre couleurs que vous devez à l'arrière de l'opération avant le calcul de la luminance, c'est tout..
ahh je vois, eh bien merci pour l'aide!
Sympa, merci
Sur Android il existe une méthode intégrée que vous pouvez utiliser:
Color.luminance()
. Elle renvoie un flottant entre 0 et 1, où 0 absolu noir et 1 blanc absolu.OriginalL'auteur Jack
Prendre un coup d'oeil à YCbCr. Depuis Java et la plupart des processus informatiques en couleurs au format RGB, vous devrez faire de la conversion de RVB, YCbCr. Il existe de nombreuses formules pour convertir RVB, YCbCr.
Une fois que vous obtenez le YCbCr valeur, vous pouvez vérifier la valeur de luminance (la valeur de Y en YCbCr).
OriginalL'auteur mauris
Il y a deux sens possibles de blanc et de noir:
L'ancien est facile: convertir en niveaux de gris de la gamme de 0 à 255. 127 ou moins est plus proche du noir (0), 128 ou au-dessus est plus proche du blanc (255).
J'ai utiliser la fonction suivante pour convertir en niveaux de gris à l'aide de valeurs de luminance (en supposant un int format ARGB pour l'entrée de la couleur):
La dernière définition (de l'homme les tons de la peau) est impossible à faire avec un simple algorithme, car il dépend des conditions de lumière, les réglages de l'appareil, exposition, etc. RVB vlaue de (190,115,60) est probablement environ le milieu dans des conditions typiques
OriginalL'auteur mikera
Convertir la couleur en niveaux de gris (en niveaux de gris de la couleur a tous les 3 composantes RVB de l'égalité, voir convertir image couleur en niveaux de gris).
Vérifier si les niveaux de gris est plus proche du noir (0) ou blanc (255)
OriginalL'auteur hkf