Maison > développement back-end > Tutoriel Python > Comment choisir efficacement les limites HSV optimales pour la détection des couleurs dans OpenCV à l'aide de « cv::inRange » ?

Comment choisir efficacement les limites HSV optimales pour la détection des couleurs dans OpenCV à l'aide de « cv::inRange » ?

Barbara Streisand
Libérer: 2025-01-05 09:49:39
original
827 Les gens l'ont consulté

How to Effectively Choose Optimal HSV Boundaries for Color Detection in OpenCV using `cv::inRange`?

Choisir les limites HSV optimales pour la détection des couleurs avec cv::inRange dans OpenCV

Dans les tâches de traitement d'image, il est souvent nécessaire de détecter des objets en fonction sur leur couleur. À cette fin, la fonction cv::inRange est couramment utilisée dans OpenCV pour identifier les pixels dans une plage de couleurs HSV spécifiée. Cependant, la sélection des limites HSV appropriées peut être difficile, en particulier lorsque différentes applications utilisent différentes échelles HSV et formats de couleur.

Problème :

Considérez le scénario de détection de l'orange. couvercle sur une image de canette de café. À l'aide d'un outil Gimp, la valeur HSV au centre du couvercle s'est avérée être (22, 59, 100). Cependant, l'application de la plage HSV (18, 40, 90) - (27, 255, 255) a abouti à des résultats de détection insatisfaisants.

Solution 1 : Ajuster l'échelle HSV

Pour résoudre ce problème, il est crucial d'être conscient que différentes applications utilisent différentes échelles HSV. Dans ce cas, gimp utilise l'échelle H : 0-360, S : 0-100, V : 0-100, tandis qu'OpenCV utilise H : 0-179, S : 0-255, V : 0-255. Pour la valeur de teinte (22) obtenue à partir de Gimp, il faut en prendre la moitié (11) et ajuster la plage en conséquence. Cela se traduit par une nouvelle plage HSV de (5, 50, 50) - (15, 255, 255).

Solution 2 : Convertir au format BGR

En outre , il est important de considérer qu'OpenCV utilise le format de couleur BGR, et non RVB. Par conséquent, dans le code Python, la conversion cv::CV_RGB2HSV doit être remplacée par cv::CV_BGR2HSV.

En implémentant ces modifications, l'algorithme de détection devrait donner des résultats améliorés. Bien que des fausses détections mineures puissent encore se produire, le contour le plus grand doit correspondre au couvercle.

Code Python amélioré avec OpenCV 2 :

import cv2

in_image = 'kaffee.png'
out_image = 'kaffee_out.png'
out_image_thr = 'kaffee_thr.png'

ORANGE_MIN = np.array([5, 50, 50], np.uint8)
ORANGE_MAX = np.array([15, 255, 255], np.uint8)

def test1():
    frame = cv2.imread(in_image)
    frameHSV = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    frame_threshed = cv2.inRange(frameHSV, ORANGE_MIN, ORANGE_MAX)
    cv2.imwrite(out_image_thr, frame_threshed)

if __name__ == '__main__':
    test1()
Copier après la connexion

Python amélioré Coder avec OpenCV 4 :

import cv2
import numpy as np

in_image = 'kaffee.png'
out_image = 'kaffee_out.png'
out_image_thr = 'kaffee_thr.png'

ORANGE_MIN = np.array([5, 50, 50], np.uint8)
ORANGE_MAX = np.array([15, 255, 255], np.uint8)

def test1():
    frame = cv2.imread(in_image)
    frameHSV = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    frame_threshed = cv2.inRange(frameHSV, ORANGE_MIN, ORANGE_MAX)
    cv2.imwrite(out_image_thr, frame_threshed)

if __name__ == '__main__':
    test1()
Copier après la connexion

En utilisant ces codes mis à jour, il est possible de coder avec précision détectez le couvercle orange sur l'image de la boîte de café.

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!

source:php.cn
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