Bonjour,
J'ai une liste de couleurs avec des valeurs RGB.
Comment les classer par classe couleur ? En disant que celle çi est dans les bleus, celle la est dans les rouges ?
Merci,
Christophe
Bonjour,
J'ai une liste de couleurs avec des valeurs RGB.
Comment les classer par classe couleur ? En disant que celle çi est dans les bleus, celle la est dans les rouges ?
Merci,
Christophe
Une technique serait de les grouper selon leur distance à une couleur donnée (distance euclidienne, la plus traditionnelle, en considérant que les trois coordonnées sont les composantes RGB). Ainsi, tu aurais (par exemple) trois couleurs de référence : rouge (255, 0, 0), vert (0, 255, 0), bleu (0, 0, 255) ; ensuite, tu itères dans tes couleurs (r, g, b) et tu assignes chacune à la couleur de référence la plus proche, c'est-à-dire
(où est la composante rouge de la couleur de référence i).
(Voir https://en.wikipedia.org/wiki/Cluster_analysis, avec les centres déjà fixés aux couleurs de référence.)
Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.
Créer des applications graphiques en Python avec PyQt5
Créer des applications avec Qt 5.
Pas de question d'ordre technique par MP !
le plus efficace est de changé de représentation des couleurs.
passe en HSV au lieu de RGB
tu aura alors la teinte exprimé en °. il te suffit alors de renseigner des plages.
entre 340 et 20 c'est rouge puis 20 a 40 c'est orange etc...
le liens wikipedia pour la conversion rgb HSV
tu pourra également avoir des variations dans tes plage en mettant des critères sur la saturation et la brillance
Oui mais ça marche que si Saturation et Luminosité sont à 100.
salut
justement on se fou de la saturation et de la brillance
ce que l'on cherche c'est la teinte
donc de
pour le calculer a partir des valeurs RGB
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 0..59 rouge 60..119 jaune 120..179 vert 180..239 cyan 240..299 Bleu 300..359 magenta
on détermine la valeur min et max
la teinte à 4 possibilité
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 minval = min(R,min(G,B)); maxVal = max(R,max(G,B));
le t correspond au classe de teintes précité
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 1°) si maxVal = minval t = 0 2°) si maxVal = R t = ((60°*((G-B)/(maxVal - minval))+360) mod 360 3°) si maxVal = G t = (60°*((B-R)/(maxVal - minval)) +120 4°) si maxVal = B t = (60°*((R-G)/(maxVal - minval)) +240
la saturation et la brillance dans ce cas n'ont aucun impacte
Blaise PascalNous souhaitons la vérité et nous trouvons qu'incertitude. [...]
Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
PS : n'oubliez pas le tag
Si on s'en tient à ces 6 couleurs, oui, la teinte suffit.
S'il veut une classe 'Noir', ou bien 'Blanc', ou bien 'Rose'... ce n'est pas bon.
N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.
salut
dans ce cas on détermine soit même les categories
tu peut utiliser d'autre systeme de valeur pour les couleur comme le CMYK
on calcul le pourcentage pour chaque elements
en arrondissant les resultat on peut catégoriser les couleur comme ceci par exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 R' = R/255 G' = G/255 B' = B/255 le K (noir) est egale a K= 1-max(R',G',B') le Cyan C=(1-R'-K)/(1/K) le magenta M=(1-G'-K)/(1/K) et le jaune Y=(1-B'-K)/(1/K)
il y a mille et une façon de définir une catégorie il faut simplement savoir ce que l'on veut
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 <div class="cms_table"><table width="500" class="cms_table"><tr valign="top" class="cms_table_tr"><td class="cms_table_td">COULEUR</td> <td class="cms_table_td">(C,M,Y,K)</td> </tr> <tr valign="top" class="cms_table_tr"><td class="cms_table_td">NOIR</td> <td class="cms_table_td">(0,0,0,1)</td> </tr> <tr valign="top" class="cms_table_tr"><td class="cms_table_td">BLANC</td> <td class="cms_table_td">(0,0,0,0)</td> </tr> <tr valign="top" class="cms_table_tr"><td class="cms_table_td">ROUGE</td> <td class="cms_table_td">(0,1,1,0)</td> </tr> <tr valign="top" class="cms_table_tr"><td class="cms_table_td">VERT</td> <td class="cms_table_td">(1,0,1,0)</td> </tr> <tr valign="top" class="cms_table_tr"><td class="cms_table_td">BLEU</td> <td class="cms_table_td">(1,1,0,0)</td> </tr> <tr valign="top" class="cms_table_tr"><td class="cms_table_td">JAUNE</td> <td class="cms_table_td">(0,0,1,0)</td> </tr> <tr valign="top" class="cms_table_tr"><td class="cms_table_td">CYAN</td> <td class="cms_table_td">(1,0,0,0)</td> </tr> <tr valign="top" class="cms_table_tr"><td class="cms_table_td">MAGENTA</td> <td class="cms_table_td">(0,1,0,0)</td> </tr> </table></div>
Blaise PascalNous souhaitons la vérité et nous trouvons qu'incertitude. [...]
Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
PS : n'oubliez pas le tag
Bonjour,
Tout dépend de ton application. En robotique mobile, je cherche la simplicité.
Je n'ai matériellement pas le temps de faire une transformation d'espace
Un classifieur parallélépipédique dans l'espace RVB peut suffire, si les couleurs
sont suffisamment distantes.
Le principe est un seuillage Hat par composante soit :
Rmin <= R <= Rmax
Vmin <= V <= Vmax
Bmin <= B <= Bmax
Cordialement
Patrick Bonnin
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager