Maison >développement back-end >Golang >Comment puis-je trouver la couleur intermédiaire entre deux couleurs RVB données à l'aide de Python ?
Trouver la couleur intermédiaire entre les teintes peintes
Lors du mélange des peintures, la couleur obtenue est influencée par les propriétés d'absorption des pigments. La peinture bleue absorbe la lumière rouge et verte, tandis que la peinture jaune absorbe la lumière bleue. Une fois combinés, ces pigments produiraient théoriquement un gris ou un noir boueux. Cependant, dans la pratique, la tendance de la peinture bleue vers le vert se traduit souvent par une teinte verte trouble.
Au lieu de simuler le mélange de peinture, un algorithme d'interpolation des couleurs le long d'une roue chromatique peut fournir des résultats intuitifs. L'espace colorimétrique HSL (Teinte, Saturation, Luminosité) est particulièrement utile car il permet de faire la moyenne des teintes.
Implémentation Python
Le code Python ci-dessous implémente l'interpolation algorithme :
from colorsys import rgb_to_hls,hls_to_rgb from math import sin,cos,atan2,pi def average_colors(rgb1, rgb2): h1, l1, s1 = rgb_to_hls(rgb1[0]/255., rgb1[1]/255., rgb1[2]/255.) h2, l2, s2 = rgb_to_hls(rgb2[0]/255., rgb2[1]/255., rgb2[2]/255.) s = 0.5 * (s1 + s2) l = 0.5 * (l1 + l2) x = cos(2*pi*h1) + cos(2*pi*h2) y = sin(2*pi*h1) + sin(2*pi*h2) if x != 0.0 or y != 0.0: h = atan2(y, x) / (2*pi) else: h = 0.0 s = 0.0 r, g, b = hls_to_rgb(h, l, s) return (int(r*255.), int(g*255.), int(b*255.))
Résultats
En utilisant le bleu et le jaune comme couleurs d'entrée, l'algorithme produit une teinte verte :
>>> average_colors((255,255,0),(0,0,255)) (0, 255, 111)
Mélange du bleu et le cyan produit cyan :
>>> average_colors((255,255,0),(0,255,255)) (0, 255, 0)
Limitations
Il est important de noter que cet algorithme ne simule pas avec précision le mélange de peinture. Le mélange de peinture implique l’absorption de la lumière, ce qui est un processus plus complexe. L'algorithme d'interpolation HSL fournit un mélange intuitif de couleurs qui n'est pas ancré dans la réalité physique.
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!