Maison > Article > développement back-end > Comment pouvons-nous améliorer la détection de la couleur rouge dans OpenCV en utilisant l'espace colorimétrique HSV ?
Détection améliorée de la couleur rouge dans OpenCV à l'aide de l'espace colorimétrique HSV
Cet article vise à améliorer la précision de la détection de la couleur rouge dans les images utilisant le HSV d'OpenCV espace colorimétrique.
Problème :
La détection d'un rectangle rouge dans une image à l'aide de cv::inRange et de l'espace colorimétrique HSV donne actuellement des résultats insatisfaisants. Le résultat souhaité est d'isoler efficacement le rectangle rouge.
Solution :
Dans HSV, la couleur rouge s'étend sur une plage qui s'enroule autour de la valeur de 180. Pour tenir compte Ceci, la plage HSV doit inclure des valeurs à la fois dans [0,10] et [170, 180].
Mise à jour du code :
L'extrait de code suivant montre la mise à jour approche :
# Include OpenCV library import cv2 # Define HSV range for red color H_MIN1 = 0 H_MAX1 = 10 H_MIN2 = 170 H_MAX2 = 180 S_MIN = 70 S_MAX = 255 V_MIN = 50 V_MAX = 255 # Read the input image image = cv2.imread('image.png') # Convert to HSV color space hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # Create masks for the two ranges of red hue mask1 = cv2.inRange(hsv, (H_MIN1, S_MIN, V_MIN), (H_MAX1, S_MAX, V_MAX)) mask2 = cv2.inRange(hsv, (H_MIN2, S_MIN, V_MIN), (H_MAX2, S_MAX, V_MAX)) # Combine the masks mask = cv2.bitwise_or(mask1, mask2) # Display the resulting mask cv2.imshow('Mask', mask) cv2.waitKey(0)
Approche alternative : Détection cyan
Une autre méthode efficace consiste à inverser l'image BGR, à la convertir en HSV et à isoler la couleur cyan (complémentaire au rouge). Cela élimine le besoin de vérifier plusieurs plages de teintes.
Code de détection du cyan :
# Invert the BGR image inverted = 255 - image # Convert to HSV color space hsv_inverted = cv2.cvtColor(inverted, cv2.COLOR_BGR2HSV) # Isolate cyan color cyan_mask = cv2.inRange(hsv_inverted, (90-10, S_MIN, V_MIN), (90+10, S_MAX, V_MAX)) # Display the cyan mask cv2.imshow('Cyan Mask', cyan_mask) cv2.waitKey(0)
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!