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 ?

Comment pouvons-nous améliorer la détection de la couleur rouge dans OpenCV en utilisant l'espace colorimétrique HSV ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-12 05:06:02679parcourir

How can we enhance red color detection in OpenCV using HSV color space?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn