Étape 17 : OpenCV : choisir votre couleur
#Slope dx = cxAvg - tX dy = cyAvg - tY #Quad I -- Goodif tX >= cxAvg and tY <= cyAvg: rads = atan2(dy,dx) degs = degrees(rads) degs = degs -90#Quad II -- Goodelif tX >= cxAvg and tY >= cyAvg: rads = atan2(dx,dy) degs = degrees(rads) degs = (degs *-1) #Quad IIIelif tX <= cxAvg and tY >= cyAvg: rads = atan2(dx,-dy) degs = degrees(rads) degs = degs +180#degs = 3elif tX <= cxAvg and tY <= cyAvg: rads = atan2(dx,-dy) degs = degrees(rads) +180#degs = 4 | 180 181 182 183 184 185 186 187 188 189 |
Cette ligne définit ce que vous cherchez, plus précisément, les deux ensembles de valeurs de la couleur : 130, 170, 110 et 190, 190, 200. Ces deux valeurs de définir la limite inférieure et la limite supérieure de la couleur que vous cherchez à trouver. Nous utilisons des limites supérieure et inférieure, que nous appellerons les seuils de couleur, est parce que notre robot se déplace par le biais de différentes lumières. Différentes sources de lumière ont tendance à changer la façon dont la webcam lit la couleur.
Le format de couleur que nous utilisons est le HSV, qui se tient pour la teinte, saturation, valeur. Plus tard, je vais probablement écrire du code pour sélectionner le robot au sein de notre programme réel, mais pour maintenant, j’utilise Gimp et la méthode suivante :
- Configurer votre webcam le dans la zone vous allez utiliser, juste comme si vous étiez prêt à contrôler.
- Exécutez le programme de webcam attaché à l’étape 10.
- Alors que le programme de webcam surveille votre robot, appuyez sur Ctrl + Impr écran
- Ouvrir Gimp.
- Appuyez sur Ctrl + V pour coller la capture d’écran dans gimp.
- Maintenant, trouver l’outil sélecteur de couleurs.
- Sélectionnez la couleur principale de votre robot.
- Maintenant, double cliquez sur le carré de couleur sur la barre d’outils.
- Une fenêtre devrait ouvrira avec les informations de couleur au sujet de la couleur que vous avez sélectionné, votre robot.
- Maintenant, les trois numéros listés devraient être proche de ce que nous avons besoin. Malheureusement, nous devons convertir évantail HSV de Gimp en évantail HSV de OpenCV. Vous voyez, plage de valeurs HSV dans Gimp est H = 0-360, S = 0-100 et V = 0-100. Dans OpenCV, H = 0-180, S = 0-255, V = 0-255. Ainsi, une conversion doit avoir lieu.
- De ma sélection, j’ai fini avec un nombre de Gimp, H: 355, Size s: 50 et V:61. Je pourrais obtenir toute fantaisie et calculer les nombres de droite, mais je me dis 180 (OpenCV) est la moitié de la 360, donc pour mon H, j’ai juste divisé par deux : 177. Les deux autres que je pense un peu à un peu. J’ai doublé et ajouté 25, S: 125 et v: 147.
- En fin de compte, cela m’a donné nombre moyen. Mais j’ai voulu un seuil inférieur et supérieur, donc j’ai pris chaque nombre et soustrait 20 pour me donner une plus faible et ajouté 20 pour me donner un dessus.
- Le résultat pour mon robot était :
#Convert float to int targetDegs =int(math.floor(degs)) #Variable to print the degrees offset from target angle. strTargetDegs =" "#Put the target angle into a string to printed. strTargetDegs =str(math.floor(degs)) #///End Finding Target Angle//////////////////////////////////// | 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
Je vais essayer de coder un sélecteur de couleur dans le programme pour faire cette saloperie tout un jeu d’enfant.
Si vous souhaitez en savoir plus, deux postes bien sur Stack Overflow.