Maison > développement back-end > C++ > 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
Libérer: 2024-11-12 05:06:02
original
803 Les gens l'ont consulté

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)
Copier après la connexion

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)
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal