Damit ein Roboter neben der Objekterkennung die Umgebung visualisieren kann, ist auch die Erkennung seiner Farbe in Echtzeit sehr wichtig.

Warum ist das wichtig? : Einige reale Anwendungen

  • Im selbstfahrenden Auto, um die Verkehrssignale zu erkennen.
  • In einigen Industrierobotern wird die Mehrfarbenerkennung verwendet, um Pick-and-Place-Aufgaben beim Trennen verschiedenfarbiger Objekte auszuführen.

Dies ist eine Implementierung zum Erkennen mehrerer Farben (hier wurden nur rote , grüne und blaue Farben berücksichtigt) in Echtzeit mithilfe der Programmiersprache Python.
Verwendete Python-Bibliotheken:

Beschreibung des Arbeitsablaufs:

    Schritt 1: Eingabe: Video über die Webcam aufnehmen.
    Schritt 2: Lesen Sie den Videostream in Bilderrahmen.
    Schritt 3: Konvertieren Sie den imageFrame in BGR (RGB-Farbraum, dargestellt als drei Matrizen aus Rot, Grün und Blau mit ganzzahligen Werten von 0 bis 255) in den HSV-Farbraum (Farbton-Sättigungswert). Der Farbton beschreibt eine Farbe in Bezug auf die Sättigung , stellt die Menge an grauer Farbe in dieser Farbe dar und der Wert beschreibt die Helligkeit oder Intensität der Farbe. Dies kann als drei Matrizen im Bereich von 0-179, 0-255 bzw. 0-255 dargestellt werden.
    Schritt 4: Definieren Sie den Bereich jeder Farbe und erstellen Sie die entsprechende Maske.
    Schritt 5:Morphologische Transformation: Dilatation, um Rauschen aus den Bildern zu entfernen.
    Schritt 6: bitweise_und zwischen dem Bildrahmen und der Maske wird ausgeführt, um diese bestimmte Farbe spezifisch zu erkennen und andere zu entfernen.
    Schritt 7: Erstellen Sie eine Kontur für die einzelnen Farben, um den erkannten Farbbereich deutlich anzuzeigen.
    Schritt 8: Ausgabe: Erkennung der Farben in Echtzeit.

Unten ist die Implementierung.

  
  
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

Ausgabe: