Étape 16 : OpenCV commence
87 88 89 90 91 92 93 94 95 96 97 thresh = cv2.inRange(hsv,np.array((152, 105, 127)), np.array((180, 145, 167))) 99 100 101 102 103 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | #This is finding the average of the X cordinate. Used for establishing#a visual link with the robot.#X cxAvg = cxAvg + cx cxAvg = cxAvg /2#Y cyAvg = cyAvg + cy cyAvg = cyAvg /2#//Finding the Target Angle/////////////////////////////////////#Target cordinates.#Randomizing target.if newTarget =="Yes": tX = random.randrange(200, 400, 1) tY = random.randrange(150, 350, 1) newTarget ="No"if iFrame >=170: if tX > cxAvg -45and tX < cxAvg +45: print"Made it through the X"if tY > cyAvg -45and tY < cyAvg +45: print"Made it through the Y" newTarget ="Yes" dots=dots+1 |
88: Cela augmente notre compteur de vues.
91: Nous lire une seule image de la webcam, nous avons déclaré, casquette, à la ligne 44.
OPENCV! Désolé, je l’adore tellement.
Donc, maintenant, vous savez que je n’ai pas lu le manuel OpenCV. Et s’il vous plaît ne me dites pas, "quoi ! Allez RTFM!" Vous allez RTFM ! J’ai une femme, enfant et un travail que j’aime. Je vais juste bricoler avec la merde et faire fonctionner. Mais cette attitude va commencer à montrer que nous passons par les appels de OpenCV, puisque je ne connais pas leur fonctionnement interne. Au lieu de cela, je vais proposer ma meilleure conjecture, et comme toujours, si quelqu'un veut me corriger ou à offrir la meilleure explication, je vais poster et donner crédit.
94: Cette brouille l’image que nous avons obtenues. Vous me direz, « mais j’ai pensé à une résolution plus élevée était mieux? » C’est le cas. Mais les bords découpés et bruit de couleur ne sont pas. Une forme simple est beaucoup plus facile pour les mathématiques de OpenCV pour envelopper alors complexe. Par conséquent, nous brouiller l’image un peu, nous donnant des bords plus souples pour faire face à.
En outre, flou allie couleurs, donc si il y a 2 pixels bleus et 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 pixel rouge dans un groupe, il devient bleu-violacé de 3 pixels. Ceci a l’avantage astucieux d’accélérer le traitement de beaucoupde l’image. Combien? Je ne sais pas que je n’ai pas RTFM.
97-100 : Notre image est convertie en un histogramme ici. Avoir l’image dans un format histogramme permet d’utiliser des États comparatifs avec elle. Ce que nous l’utilisons pour est de se débarrasser de toutes les couleurs sauf celui que nous essayons de trouver. Cela nous donnera une image noir et blanc, le blanc étant seulement la couleur que nous cherchons à trouver. Ligne 98 est où votre couleur est définie (c’est les deux "np.array"s). Dans l’étape suivante, je vais passer par la sélection de la couleur exacte de votre robot.
103: Trouve le périmètre de rayonnement de l’espace blanc dans l’image résultante.
107-112 : OpenCV compte alors le nombre de pixels est dans chaque contour qu’il trouve dans l’image de la webcam. Il suppose que celui qui a la zone plus blanche (aka, la "masse") est notre objet.
114-117 : Après que nous avons décidé quel objet nous voulons suivre, maintenant il faut venir avec les coordonnées du centre de gravité. C’est ce que font les lignes 115-116. Je n'ai pas fait la recherche sur les maths là, mais je crois que c’est en moyenne les moments du polygone et appelle la moyenne soit centroïde X ou Y, selon le calcul. Mais, n’hésitez pas à corriger ou à expliquer mieux.
121-127 : Ici nous verrouiller sur la masse que nous pensons est le robot. Il commence par la collecte d’un 150 échantillons avant il énoncera effectue le suivi de la plus grosse masse. Mais après qu’il a commencé à suivre la plus grosse masse, alors nous essayons de rester verrouillée sur elle. Il s’agit de la ligne 122-127. En substance, nous permettons à la masse à déplacer assez d’être considéré comme un mouvement par le robot, mais pas tant que le bruit (comme un coup de main errant dans l’image de la webcam) fera le suivi éteindre le robot.