Étape 14 : Fonction OpenCV commence
#Incrementing frame index iFrame = iFrame +1#Read the frames _,frame = cap.read() #Smooth it frame = cv2.blur(frame,(3,3)) #Convert to hsv and find range of colors hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) thresh = cv2.inRange(hsv,np.array((0, 80, 80)), np.array((20, 255, 255))) thresh2 = thresh.copy() #Find contours in the threshold image contours,hierarchy = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) #Finding contour with maximum area and store it as best_cnt max_area =0for cnt in contours: area = cv2.contourArea(cnt) if area > max_area: max_area = area best_cnt = cnt #Finding centroids of best_cnt and draw a circle there M = cv2.moments(best_cnt) cx,cy =int(M['m10']/M['m00']), int(M['m01']/M['m00']) cv2.circle(frame,(cx,cy),10,255,-1) #After 150 frames, it compares the bot's X and X average,#if they are the same + or - 5, it assumes the bot is being tracked.if iFrame >=150: if cxAvg < (cx +5) and cxAvg > (cx -5): xOld == cxAvg stringXOk ="X Lock"if cyAvg < (cy +5) and cyAvg > (cy -5): yOld == cyAvg stringYOk ="Y Lock" | 98 |
42: ici nous commençons cette fonction qui fait l’essentiel de l’ouvrage, OpenCV() :. C’est l’une des fonctions que sera enfilée en ligne 345-347.
44: nous ouvrent à la webcam et lui donner le Pseudo PAC. Si je me souviens bien, le « 0 » dans la parenthèse réfère à toute caméra prévalant sur votre bus USB, donc si vous avez plus d’une caméra, vous pouvez spécifier en changeant ce numéro, par exemple, cap = cv2. VideoCapture(3). Notez que nous avons appelé le OpenCV module cv2, donc nous utilisons le module OpenCV pour accéder à la webcam.
46-52: juste faire les variables, nous avons déclaré travail au sein de cette fonction. Cela ne pourrait pas être nécessaire, mais hé, je ne lis pas du tout manuel de Python.
55: C’est juste un indicateur de chaîne qui est retourné pour indiquer à l’ordinateur pour générer une nouvelle cible pour le robot. Noter que nous avons initialement Réglez-le sur « Oui » ce qui signifie que la première fois que nous courons grâce à cette fonction une cible doit être généré.
58: Il s’agit d’une variable de type entier pour compter combien de points le robot a « mangé ».
OK, avant d’entrer dans le prochain bit, j’ai besoin de prendre une minute et d’expliquer comment l’aborder réellement obtenir les coordonnées de notre robot. Comme vous le savez, OpenCV effectue le travail dur pour nous, en nous donnant les coordonnées X et Y du plus grand blob rouge sur l’écran. Cependant, les coordonnées, qu'il nous donne sont au centre de la masse. Maintenant, c’est tout juste une supposition logique parce que je n’a pas lu le manuel de OpenCV ensemble, mais je crois que la coordonnée X ou Y faisant référence au centre de cette masse est appelée le Centre de gravité.
Cela peut paraît simple. C’est parce que c’est, je ne sais pas pourquoi nous ne juste l’appeler le centre de merde ou quelque chose. Eh, Eh bien. Cependant, il deviendra important quand nous faisons une détection de collision entre le robot et sa cible.
61-62: tout ça pour dire, le "c" dans cyAvg et cxAvg signifie centroïde. Ainsi, ce sont des variables qui contient la course moyenne pour les coordonnées X et Y du centroïde de la tache rouge.
65-66 : Ce sont des variables de la sauvegarde des cxAvg et des cyAvg et seront importants autour de ligne 122-127 lorsque nous essayons de déterminer si la couleur que nous sommes suivi est en fait le robot ou quelque autre morceau de ferraille assez rouge dedans pour imbécile OpenCV.
69: Simplement, cela efface la variable de chaîne avec des données qui sont venus le robot, comme la position du robot, avant un autre iFrame commence.