Paso 14: Función de OpenCV comienza
#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: aquí comenzamos esta función que hace la mayor parte de la obra, OpenCV():. Es una de las funciones que se enroscará en líneas 345-347.
44: abrimos la webcam y le dan el apodo tapa. Si mal recuerdo justo el "0" en el paréntesis refiere a cualquier cámara viene primero en el bus USB, por lo que si tienes más de una cámara puede especificar al cambiar este número, por ejemplo, cap = cv2. VideoCapture(3). Observe que la llamamos la OpenCV módulo cv2, así que estamos utilizando el módulo de OpenCV para acceder a la webcam.
46-52: hacer las variables declaradas trabajo dentro de la función. Esto no pudo ser necesaria, pero hey, no leer el manual entero de Python.
55: Esto es sólo un indicador de cadena que se voltea para decirle a la PC para generar un nuevo objetivo para el robot. Tenga en cuenta que inicialmente ponerlo decir "Sí" la primera vez que ejecuta a través de esta función objetivo debe ser generado.
58: Se trata de una variable entera para contar cuántos puntos el robot se "comía".
OK, antes de llegar a la siguiente broca necesito para tomar un minuto y explicar cómo nos acercamos realmente conseguir las coordenadas de nuestro robot. Como ustedes saben, OpenCV hace el trabajo duro por nosotros, que nos da la coordenada X e Y de la gota roja más grande en la pantalla. Sin embargo, las coordenadas que nos da son el centro de la masa. Ahora, esto es simplemente una suposición lógica porque no he leído el manual entero de OpenCV, pero creo que la coordenada X o Y que se refiere al centro de esta masa se llama centroide.
Este poder parece simple. Eso es porque es, no estoy seguro de por qué no simplemente lo llamamos el centro maldito o algo. EH, bueno. Sin embargo, será importante cuando hacemos detección de colisiones entre el robot y su destino.
61-62: todo lo que dice, la "c" en cyAvg y cxAvg está parado para el centroide. Por lo tanto, son variables que se llevará a cabo el funcionamiento medio de las coordenadas X e Y del centroide de la gota roja.
65-66: Estos son variables de copia de seguridad de la cxAvg y cyAvg y serán importantes alrededor de la línea 122-127 cuando estamos tratando de decidir si el color que estamos seguimiento es en realidad el robot o algún otro pedazo de basura con bastante rojo a tonto OpenCV.
69: Esto simplemente borra la variable de cadena con datos provenientes del robot, como hacia el robot, antes de que comience iFrame de otro.