Para que um robô visualize o ambiente, junto com a detecção do objeto, a detecção de sua cor em tempo real também é muito importante.

Por que isso é importante? : Alguns aplicativos do mundo real

  • Em carro com direção automática, para detectar os sinais de trânsito.
  • A detecção de várias cores é usada em alguns robôs industriais, para realizar tarefas de pick-and-place na separação de objetos de cores diferentes.

Esta é uma implementação de detecção de várias cores (aqui, apenas as cores vermelho , verde e azul foram consideradas) em tempo real usando a linguagem de programação Python.
Bibliotecas Python usadas:

Descrição do Fluxo de Trabalho:

    Etapa 1: Entrada: Capture vídeo pela webcam.
    Etapa 2: Leia o fluxo de vídeo em quadros de imagem.
    Etapa 3: Converta o imageFrame em BGR (espaço de cores RGB representado como três matrizes de vermelho, verde e azul com valores inteiros de 0 a 255) para espaço de cores HSV (hue-saturation-value). Matiz descreve uma cor em termos de saturação , representa a quantidade de cor cinza nessa cor e o valor descreve o brilho ou intensidade da cor. Isso pode ser representado como três matrizes no intervalo de 0-179, 0-255 e 0-255, respectivamente.
    Etapa 4: defina o intervalo de cada cor e crie a máscara correspondente.
    Etapa 5:Transformação Morfológica: Dilatação, para remover ruídos das imagens.
    Etapa 6: bitwise_and entre o quadro da imagem e a máscara é realizada para detectar especificamente aquela cor particular e separar outras.
    Etapa 7: Crie um contorno para as cores individuais para exibir a região colorida detectada de maneira distinta.
    Etapa 8: Saída: Detecção das cores em tempo real.

Abaixo está a implementação.

  
  
import numpy as np 
import cv2 
  
  
webcam = cv2.VideoCapture(0) 
while(1): 
      
    
    
    _, imageFrame = webcam.read() 
  
    
    
    
    
    hsvFrame = cv2.cvtColor(imageFrame, cv2.COLOR_BGR2HSV) 
  
    
    
    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) 
  
    
    
    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) 
  
    
    
    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) 
      
    
    
    
    
    kernal = np.ones((5, 5), "uint8") 
      
    
    red_mask = cv2.dilate(red_mask, kernal) 
    res_red = cv2.bitwise_and(imageFrame, imageFrame,  
                              mask = red_mask) 
      
    
    green_mask = cv2.dilate(green_mask, kernal) 
    res_green = cv2.bitwise_and(imageFrame, imageFrame, 
                                mask = green_mask) 
      
    
    blue_mask = cv2.dilate(blue_mask, kernal) 
    res_blue = cv2.bitwise_and(imageFrame, imageFrame, 
                               mask = blue_mask) 
   
    
    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))     
  
    
    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)) 
  
    
    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)) 
              
    
    cv2.imshow("Multiple Color Detection in Real-TIme", imageFrame) 
    if cv2.waitKey(10) & 0xFF == ord('q'): 
        cap.release() 
        cv2.destroyAllWindows() 
        break

Resultado: