Verbesserung der roten Farberkennung mit OpenCV mithilfe des HSV-Farbraums
In OpenCV bietet der HSV-Farbraum einen effektiven Ansatz zur Erkennung bestimmter Farben. einschließlich rot. Aufgrund der kreisförmigen Natur des Farbtonkanals in HSV kann die rote Farbe jedoch Werte um 180 Grad umwickeln. Dies kann bei der genauen Erkennung roter Objekte zu Herausforderungen führen.
Um dieses Problem zu lösen, kann eine genauere Erkennung erreicht werden, indem zwei Bereiche für die Farbtonkomponente berücksichtigt werden: [0,10] und [170, 180]. Durch die Einbeziehung beider Bereiche stellen wir sicher, dass die Erkennung das gesamte rote Farbspektrum abdeckt.
Der folgende Python-Code demonstriert diesen Ansatz:
import cv2 # Read the input image image = cv2.imread("path_to_image") # Convert BGR to HSV color space hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # Define HSV values for red color hue_min1 = 0 hue_max1 = 10 hue_min2 = 170 hue_max2 = 180 sat_min = 70 sat_max = 255 val_min = 50 val_max = 255 # Create masks for the two hue ranges mask1 = cv2.inRange(hsv, (hue_min1, sat_min, val_min), (hue_max1, sat_max, val_max)) mask2 = cv2.inRange(hsv, (hue_min2, sat_min, val_min), (hue_max2, sat_max, val_max)) # Combine the masks mask = mask1 | mask2 # Display the mask cv2.imshow("Mask", mask) cv2.waitKey(0) cv2.destroyAllWindows()
Dieser Code erkennt effektiv das rote Rechteck im Bild , wie in der Maskenausgabe gezeigt.
Alternativer Ansatz
Eine alternative Methode ist die Invertierung das BGR-Bild und konvertieren Sie es dann in HSV. Dieser Ansatz sucht im Wesentlichen nach der Komplementärfarbe Cyan (90 Grad auf dem Farbtonkanal), sodass Sie Rot mit einem einzigen Bereich erkennen können.
Der folgende Python-Code demonstriert diese Technik:
import cv2 # Read the input image image = cv2.imread("path_to_image") # Invert the BGR image inverted_image = cv2.bitwise_not(image) # Convert inverted image to HSV color space hsv_inverted = cv2.cvtColor(inverted_image, cv2.COLOR_BGR2HSV) # Define HSV values for cyan color (inverted red) hue_min = 90 - 10 hue_max = 90 + 10 sat_min = 70 sat_max = 255 val_min = 50 val_max = 255 # Create a mask for the cyan color range mask = cv2.inRange(hsv_inverted, (hue_min, sat_min, val_min), (hue_max, sat_max, val_max)) # Display the mask cv2.imshow("Mask", mask) cv2.waitKey(0) cv2.destroyAllWindows()
Beide Ansätze bieten eine verbesserte Erkennung der roten Farbe mithilfe von OpenCV im HSV-Farbraum und liefern so genauere Ergebnisse für Bildverarbeitungsanwendungen.
Das obige ist der detaillierte Inhalt vonWie kann ich in OpenCV mithilfe des HSV-Farbraums eine präzisere Erkennung der roten Farbe erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!