Stap 14: OpenCV functie begint
#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: hier beginnen we deze functie die het meeste werk doet, OpenCV():. Het is een van de functies die zal worden schroefdraad Lines 345-347.
44: we openstellen van de webcam en geef het de bijnaam GLB. Als ik mij goed herinner de "0" in het haakje verwijst naar welke camera voorop op uw USB-bus, dus als u meer dan één camera hebt, u opgeven kunt door het veranderen van dit nummer, bijvoorbeeld cap = cv2. VideoCapture(3). Zoals u ziet, dat we noemden het OpenCV module cv2, zodat we de OpenCV-module gebruiken om de toegang van de webcam.
46-52: alleen het maken van de variabelen gedeclareerd wij werkzaamheden binnen deze functie. Dit zou niet nodig zijn, maar hey, ik niet de handleiding te lezen hele Python.
55: Dit is gewoon een tekenreeks vlag die wordt gespiegeld om te vertellen van de PC voor het genereren van een nieuwe doelstelling voor de robot. Opmerking, we in eerste instantie zet deze op "Ja" wat betekent dat de eerste keer we door middel van deze functie een streefcijfer lopen moet worden gegenereerd.
58: Dit is een geheelvariabele te tellen hoeveel punten de robot heeft "aten".
OK, voordat ik begin met de volgende bit moet ik nemen een minuut en uitleggen hoe wij benaderen daadwerkelijk krijgen de coördinaten van onze robot. Zoals u weet, doet OpenCV het harde werk voor ons, ons geeft de X- en Y-coördinaat van de grootste rode vlek op het scherm. Echter zijn de coördinaten die het geeft ons het centrum van de massa. Nu, dit is allemaal gewoon een logische gok omdat ik niet de hele OpenCV handleiding te lezen, maar ik denk dat de X- of Y-coördinaat die naar het midden van deze massa verwijst heet het zwaartepunt.
Dit kan lijkt eenvoudig. Dat is omdat het, ik ben niet zeker waarom niet gewoon we het de verdomde center of iets noemen. Eh, Nou ja. Echter zal het belangrijker wanneer wij botsingdetectie tussen haar doelstelling en de robot.
61-62: alles wat om te zeggen, de 'c' in cyAvg en cxAvg staat voor zwaartepunt. Dus, dit zijn variabelen die de werking zal houden voor de X- en Y-coördinaten van de rode vlek centroid gemiddelde.
65-66: Deze zijn rug-up variabelen van de cxAvg en cyAvg en belangrijke rond lijn 122-127 worden wanneer we proberen om te beslissen of de kleur die wij zijn bijhouden eigenlijk de robot of andere rommel met genoeg rood in het te gek OpenCV is.
69: Dit wist gewoon de tekenreeksvariabele met gegevens die kwam van de robot, zoals de robot de rubriek, voordat een ander iFrame begint.