Para que un robot visualice el entorno, además de la detección de objetos, también es muy importante la detección de su color en tiempo real.
¿Por qué esto es importante? : Algunas aplicaciones del mundo real
- En coche autónomo, para detectar las señales de tráfico.
- La detección de múltiples colores se utiliza en algunos robots industriales para realizar tareas de recoger y colocar al separar objetos de diferentes colores.
Esta es una implementación de detección de múltiples colores (aquí, solo se han considerado los colores rojo , verde y azul ) en tiempo real usando el lenguaje de programación Python.
Bibliotecas de Python utilizadas:
Descripción del flujo de trabajo:
- Paso 1: Entrada: Capture video a través de la cámara web.
Paso 2: Lea la transmisión de video en cuadros de imagen.
Paso 3: Convierta el marco de imagen en BGR (espacio de color RGB representado como tres arrays de rojo, verde y azul con valores enteros de 0 a 255) a espacio de color HSV (valor de saturación de tono). El tono describe un color en términos de saturación , representa la cantidad de color gris en ese color y el valor describe el brillo o la intensidad del color. Esto se puede representar como tres arrays en el rango de 0-179, 0-255 y 0-255 respectivamente.
Paso 4: Define la gama de cada color y crea la máscara correspondiente.
Paso 5:Transformación Morfológica: Dilatación, para eliminar ruidos de las imágenes.
Paso 6: bitwise_and entre el marco de la imagen y la máscara se realiza para detectar específicamente ese color en particular y descartar otros.
Paso 7: cree un contorno para los colores individuales para mostrar claramente la región coloreada detectada.
Paso 8: Salida: Detección de los colores en tiempo real.
A continuación se muestra la implementación.
# Python code for Multiple Color Detection import numpy as np import cv2 # Capturing video through webcam webcam = cv2.VideoCapture(0) # Start a while loop while(1): # Reading the video from the # webcam in image frames _, imageFrame = webcam.read() # Convert the imageFrame in # BGR(RGB color space) to # HSV(hue-saturation-value) # color space hsvFrame = cv2.cvtColor(imageFrame, cv2.COLOR_BGR2HSV) # Set range for red color and # define mask red_lower = np.array([136, 87, 111], np.uint8) red_upper = np.array([180, 255, 255], np.uint8) red_mask = cv2.inRange(hsvFrame, red_lower, red_upper) # Set range for green color and # define mask green_lower = np.array([25, 52, 72], np.uint8) green_upper = np.array([102, 255, 255], np.uint8) green_mask = cv2.inRange(hsvFrame, green_lower, green_upper) # Set range for blue color and # define mask blue_lower = np.array([94, 80, 2], np.uint8) blue_upper = np.array([120, 255, 255], np.uint8) blue_mask = cv2.inRange(hsvFrame, blue_lower, blue_upper) # Morphological Transform, Dilation # for each color and bitwise_and operator # between imageFrame and mask determines # to detect only that particular color kernal = np.ones((5, 5), "uint8") # For red color red_mask = cv2.dilate(red_mask, kernal) res_red = cv2.bitwise_and(imageFrame, imageFrame, mask = red_mask) # For green color green_mask = cv2.dilate(green_mask, kernal) res_green = cv2.bitwise_and(imageFrame, imageFrame, mask = green_mask) # For blue color blue_mask = cv2.dilate(blue_mask, kernal) res_blue = cv2.bitwise_and(imageFrame, imageFrame, mask = blue_mask) # Creating contour to track red color contours, hierarchy = cv2.findContours(red_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) for pic, contour in enumerate(contours): area = cv2.contourArea(contour) if(area > 300): x, y, w, h = cv2.boundingRect(contour) imageFrame = cv2.rectangle(imageFrame, (x, y), (x + w, y + h), (0, 0, 255), 2) cv2.putText(imageFrame, "Red Colour", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255)) # Creating contour to track green color contours, hierarchy = cv2.findContours(green_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) for pic, contour in enumerate(contours): area = cv2.contourArea(contour) if(area > 300): x, y, w, h = cv2.boundingRect(contour) imageFrame = cv2.rectangle(imageFrame, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.putText(imageFrame, "Green Colour", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 0)) # Creating contour to track blue color contours, hierarchy = cv2.findContours(blue_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) for pic, contour in enumerate(contours): area = cv2.contourArea(contour) if(area > 300): x, y, w, h = cv2.boundingRect(contour) imageFrame = cv2.rectangle(imageFrame, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.putText(imageFrame, "Blue Colour", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0)) # Program Termination cv2.imshow("Multiple Color Detection in Real-TIme", imageFrame) if cv2.waitKey(10) & 0xFF == ord('q'): cap.release() cv2.destroyAllWindows() break
Producción:
Publicación traducida automáticamente
Artículo escrito por goodday451999 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA