[R] Plage de couleurs

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
mangaskiff
Niveau 4
Niveau 4
Messages : 72
Enregistré le : sam. 25 juil. 2009 23:45
Status : Hors ligne

[R] Plage de couleurs

#1

Message par mangaskiff »

Bonjour/Bonsoir,

Alors tout d'abord le contexte. Je me suis mis en tête de capter à l'aide d'une webcam les couleur de chaque cube présent sur une face du rubik's cube. Pour ça pas trop de problème même si c'est un peu du bricolage à l'aide de l'UDF Webcam et de pixelgetcolor je m'en suis plutôt pas mal sorti pour afficher les couleurs que capture la webcam.

Illustartion:
► Afficher le texte
Maintenant le problème est de généraliser les couleurs perçues. En effet le rubik's cube ne comporte que 6 couleurs différentes (blanc, bleu, rouge, jaune, orange, vert) alors que la webcam dont je dispose capte une teinte de rouge à un instant donné. Par exemple on se retrouver avec du rouge FF0030 au début puis 2 secondes après la webcam capte du FF0035. le but est de généraliser et de dire que c'est du rouge. J'ai un peu réfléchit et je me suis dit qu'il faudrait peut être déterminé des plages de couleurs pour les six couleurs du rubik's cube puis comparer la valeur perçue à chaque valeur de la plage mais d'une part ce serait un processus assez long et d'autre part je ne connais pas ces plages (même si je pense que ça ne doit pas être trop du de les trouver à l'aide d'un logiciel de retouche d'image basique.

Je ne sais pas si j'ai été très claire si besoin j'essayerai de ré-expliquer mais en gros il me faudrait une méthode pour qu'à partir d'un couleur d'entrée qui est rouge (ce rouge pouvant avoir plusieurs teintes à travers le temps) dire : cette couleur est rouge.

Merci pour vos éventuelles propositions/solutions
Modifié en dernier par mangaskiff le lun. 27 août 2012 01:31, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Plage de couleurs

#2

Message par Tlem »

En travaillant sur les plages des valeurs RGB. ;)
http://lmgtfy.com/?q=rgb+value
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mangaskiff
Niveau 4
Niveau 4
Messages : 72
Enregistré le : sam. 25 juil. 2009 23:45
Status : Hors ligne

Re: [..] Plage de couleurs

#3

Message par mangaskiff »

Tout d'abord merci.

En m'aidant de l'indication de Tlem j'en suis venu à penser qu'il est posssible d'obtenir le résultat voulu avec la fonction _ColorGetRGB en faisant quelque chose de la forme

Code : Tout sélectionner

Func _HexToCubeColor($CouleurHex)
    $RGB = _ColorGetRGB($CouleurHex)
    $CubeCouleur = ""
        Select
            Case Condition
                $CubeCouleur = "Orange"
            Case Condition
                $CubeCouleur = "Rouge"
            Case Condition
                $CubeCouleur = "Bleu"
            Case Condition
                $CubeCouleur = "Vert"
            Case Condition
                $CubeCouleur = "Jaune"
            Case Condition
                $CubeCouleur = "Blanc"
            Case Else
                MsgBox(0, "Erreur", "Cette couleur n'est pas supportée.")
                $CubeCouleur = ""
        EndSelect
        Return $CubeCouleur
EndFunc
Cependant j'ai essayé plusieurs combinaisons de conditions sans succès.
Sea
Niveau 6
Niveau 6
Messages : 219
Enregistré le : ven. 22 juin 2012 18:51
Localisation : France
Status : Hors ligne

Re: [..] Plage de couleurs

#4

Message par Sea »

Il y à peux être plus simple mais tu peux check les valeurs rgb si elles sont entre x rouge/x vert /x bleu alors ça correspond à cette couleur ^^'

Pour cela je te laisse regardé ceci => http://lslwiki.net/lslwiki/wakka.php?wakka=color
Avatar du membre
Uranium
Niveau 5
Niveau 5
Messages : 143
Enregistré le : mer. 28 mars 2012 13:13
Status : Hors ligne

Re: [..] Plage de couleurs

#5

Message par Uranium »

Salut ,

Je pense que vous pouvez faire genre :

Code : Tout sélectionner

If _ColorGetBlue => .. And _ColorGetRed >= ... And _ColorGetGreen <= .. Then
$Color = 'Rouge'
ElseIf
...
Cordialement,
« En mathématiques, “évident” est le mot le plus dangereux. »
Avatar du membre
mangaskiff
Niveau 4
Niveau 4
Messages : 72
Enregistré le : sam. 25 juil. 2009 23:45
Status : Hors ligne

Re: [..] Plage de couleurs

#6

Message par mangaskiff »

Merci pour vos réponses cependant :

@Sea: J'ai regardé le contenu du lien cependant ces valeurs sont pour des couleurs fixe or dans mon cas je peux avoir une même couleur avec des teintes différentes par exemple un rouge 255/0/0 et un rouge 240/0/0.

@Uranium: Cela revient à la même structure rédigée autrement.

Je continu de chercher tout en espérant trouver une solution
Sea
Niveau 6
Niveau 6
Messages : 219
Enregistré le : ven. 22 juin 2012 18:51
Localisation : France
Status : Hors ligne

Re: [..] Plage de couleurs

#7

Message par Sea »

Non prenons par exemple la couleur orange nous pouvons dire à peux prêt que n'importe quel teinte du orange ce trouve dans ce carré(la dernière ligne et colonne peut être jaune enfin à voir le but c'est de comprendre on s'en fou un peux ici que les valeur sois juste ou non ^^)
► Afficher le texte
Donc pour avoir TOUTES les couleurs RGB comprise dans ce carré il faut que la couleur sois composé de 100% de rouge AINSI QUE 40% à 80% de vert AINSI QUE 0% à 40% de bleu
Ce qui nous donne

Code : Tout sélectionner

if _ColorGetRed = 255 AND _ColorGetGreen <= 100 AND _ColorGetGreen >= 200 AND _ColorGetGreen <= 0 AND _ColorGetGreen >= 100 then
$color = orange
endif
 
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Plage de couleurs

#8

Message par Tlem »

Autre solution :
Partant de ceci :

Code : Tout sélectionner

Couleur   Hex        R       G       B
Orange  #FF8000     255     128     0
Rouge   #FF0000     255     0       0
Bleu    #0000FF     0       0       255
Vert    #00FF00     0       255     0
Jaune   #FFFF00     255     255     0
Blanc   #FFFFFF     255     255     255
pourquoi ne pas utiliser PixelSearch() avec le paramètre shade-variation adéquate.
On prend un petit carré de pixel correspondant à un des carrés de couleur puis on lui fait passer une batterie de test de couleur (Orange, Rouge, Bleu, etc ...). Puisque la fonction retourne @erreur si la couleur n'y est pas, on devrait théoriquement déterminer la couleur du carré. L'idéal serait de faire une moyenne sur un ensemble de pixel suffisamment espacés, car il suffit d'un éclat de lumière ou d'un reflet quelconque pour fausser le résultat ... :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mangaskiff
Niveau 4
Niveau 4
Messages : 72
Enregistré le : sam. 25 juil. 2009 23:45
Status : Hors ligne

Re: [..] Plage de couleurs

#9

Message par mangaskiff »

@Sea: Ceci ne fonctionne pas (testé avec la couleur 0xFF5D24).

@Tlem: Je vais essayé de creuser cette piste.

Merci encore pour vos réponses et si quelqu'un à d'autres propositions.
Sea
Niveau 6
Niveau 6
Messages : 219
Enregistré le : ven. 22 juin 2012 18:51
Localisation : France
Status : Hors ligne

Re: [..] Plage de couleurs

#10

Message par Sea »

J'ai dis qu'il fallait revoir les nombres... Et faire une analyse un peux plus poussé des couleurs ^^'

Normal que pour 0xff5d24 ceci ne fonctionne pas car il a une valeur de vert de 93 et en plus je m'étais trompé j'avais mis _ColorGetGreen au lieu de _ColorGetBlue ^^'
Code modifié:

Code : Tout sélectionner

if _ColorGetRed <= 200 AND _ColorGetRed >= 255 AND _ColorGetGreen <= 50 AND _ColorGetGreen >= 200 AND _ColorGetBlue <= 0 AND  _ColorGetBlue>= 100 then
$color = orange
endif
 
Après par exemple rien ne t'empêche de faire plusieurs test pour être vraiment sur mais comme je l'ai dis tu dois étudié plus les couleurs et définir quel couleur on appel "orange".
Cependant je pense que le code que je t'ai passé suffit pour définir de l'orange à testé à affiné il faut peut être rajouter un elseif peut être que quand il y a moins de bleue on peux avoir des valeurs de 210 en vert et sa nous donne du orange(je dis sa pour te donné l'idée je n'ai pas regardé si c'est vrai ou non juste pour te faire comprendre ce que je veux te dire)

Après comme je te le dis les couleurs est une notion créé par l'homme et chaque individu n'a pas la même perception de celle-ci c'est pour cela que tu dois affiné tes résultats en faisant le plus d'essaye possible.
De plus tu peux très bien utiliser la méthode de thlem est la mienne pour obtenir un meilleur rendu ainsi par exemple tu pourrais dessiner sur ta fenêtre des petits carrées où la personne devra placer les carrés pour que ton application le détecte au mieux :)

PS: tien un très bon site pour te savoir comment est composé la couleur en fonction de son code hexadecimal http://www.color-hex.com/ :)
Avatar du membre
mangaskiff
Niveau 4
Niveau 4
Messages : 72
Enregistré le : sam. 25 juil. 2009 23:45
Status : Hors ligne

Re: [..] Plage de couleurs

#11

Message par mangaskiff »

Je n'ai pas trop de temps pour effectuer plus de recherche sur ce sujet en ce moment mais je pense qu'avec un peu de travail ça ne posera pas de problème je passe en résolu et quand j'aurai trouvé la solution je viendrai éditer.
Répondre