Amélioration de la détection des couleurs rouges avec OpenCV à l'aide de l'espace colorimétrique HSV
Dans OpenCV, l'espace colorimétrique HSV offre une approche efficace pour détecter des couleurs spécifiques, y compris le rouge. Cependant, en raison de la nature circulaire du canal de teinte dans HSV, la couleur rouge peut s'enrouler autour de valeurs proches de 180 degrés. Cela peut poser des défis dans la détection précise des objets rouges.
Pour résoudre ce problème, une détection plus précise peut être obtenue en considérant deux plages pour la composante de teinte : [0,10] et [170, 180]. En incluant les deux plages, nous garantissons que la détection couvre tout le spectre de couleur rouge.
Le code Python suivant démontre cette approche :
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()
Ce code détecte efficacement le rectangle rouge dans l'image , comme indiqué dans la sortie du masque.
Approche alternative
Une méthode alternative consiste à inverser le Image BGR, puis convertissez-la en HSV. Cette approche recherche essentiellement la couleur complémentaire, le cyan (90 degrés sur le canal de teinte), vous permettant de détecter le rouge avec une seule plage.
Le code Python suivant illustre cette technique :
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()
Les deux approches offrent une détection améliorée de la couleur rouge à l'aide d'OpenCV dans l'espace colorimétrique HSV, fournissant des résultats plus précis pour les applications de traitement d'image.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!