Paso 17: OpenCV: seleccionar tu Color
#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 |
Esta línea define qué color usted está buscando, específicamente, los dos conjuntos de valores: 130, 170, 110, 190, 190, 200. Estos dos valores establecen el límite inferior y el límite superior del color que usted está buscando para encontrar. La razón que utilizamos límites superior e inferior, que llamaremos a los umbrales de color, es que nuestro robot se mueva a través de diferentes luces. Diferentes fuentes de luz tienen una tendencia a cambiar cómo la cámara web lee el color.
El formato de color que estamos utilizando es HSV, que soportes para hue, saturación, valor. Más tarde, probablemente voy a escribir código para seleccionar el robot dentro de nuestro programa actual, pero por ahora yo uso el Gimp y el siguiente método:
- Configurar su webcam la en el área que va a utilizar, al igual que usted está listo para controlarlo.
- Ejecute el programa de webcam conectado en el paso 10.
- Mientras que el programa de la webcam es viendo tu robot, presione Ctrl + Impr Pant
- Abre Gimp.
- Golpear Ctrl + V para pegar la captura de pantalla en gimp.
- Ahora, encontrar la herramienta Selector de Color.
- Seleccione el color principal de tu robot.
- Ahora haga doble clic en el cuadrado de color en la barra de herramientas.
- Debe abrirá una ventana con la información del color sobre el color que elegiste, tu robot.
- Ahora, los tres números que aparecen deben estar cerca de lo que necesitamos. Lamentablemente, tenemos que convertir de escala numérica de la HSV del Gimp a escala numérica de HSV de OpenCV. Verás, rango de valores HSV en Gimp es H = 0-360, S = 0-100 y V = 0-100. En OpenCV, H = 0-180, S = 0-255, V = 0-255. Por lo tanto, alguna conversión debe tomar lugar.
- De mi selección terminó con números de Gimp de H: 355, S:50 y V:61. Que podía obtener de todo lujo y calcular los números correctos, pero figura 180 (OpenCV) es la mitad de 360, así que para mi H sólo dividido por dos: 177. Los otros dos que supongo que poco a poco. Dobló y añadió 25, S: 125 y V: 147.
- Al final, esto me dio mediados números. Pero quería un umbral superior e inferior, así que tomó cada número y resta 20 para darme un más bajo y agregó 20 para darme un superior.
- El resultado para mi robot fue:
#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 |
Voy a intentar un selector de color de código en el programa para hacer esta cosa entera maldita un juego de niños.
Si desea leer más, dos buenas entradas sobre desbordamiento de pila.