Maison >développement back-end >C++ >Comment améliorer la précision de la détection des objets rouges dans l'espace colorimétrique HSV avec OpenCV ?
Problème :
Étant donné une image contenant un rectangle rouge, la tâche est d'améliorer la précision de détection de la couleur rouge en utilisant la méthode cv::inRange d'OpenCV dans la couleur HSV espace.
Approche originale :
int H_MIN = 0; int H_MAX = 10; int S_MIN = 70; int S_MAX = 255; int V_MIN = 50; int V_MAX = 255; cv::inRange( imageHSV, cv::Scalar( H_MIN, S_MIN, V_MIN ), cv::Scalar( H_MAX, S_MAX, V_MAX ), imgThreshold0 );
Cette approche donne des résultats insatisfaisants.
Solution améliorée :
L'approche originale ne tient pas compte de "l'enveloppement" de la couleur rouge autour de 180 degrés dans le HSV espace. Pour résoudre ce problème, la plage H doit inclure à la fois [0,10] et [170, 180].
inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1); inRange(hsv, Scalar(170, 70, 50), Scalar(180, 255, 255), mask2); Mat1b mask = mask1 | mask2;
Cette approche mise à jour donne des résultats de détection améliorés.
Alternative Approche :
Une autre méthode efficace consiste à :
Mat3b bgr_inv = ~bgr; inRange(hsv_inv, Scalar(90 - 10, 70, 50), Scalar(90 + 10, 255, 255), mask); // Cyan is 90
Cette approche alternative fournit une vérification de plage unique et produit des résultats satisfaisants.
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!