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 à l'aide de la méthode cv::inRange d'OpenCV dans l'espace colorimétrique HSV.
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 fournit résultats insatisfaisants.
Solution améliorée :
L'approche originale ne tient pas compte de « l'enveloppement » de la couleur rouge à environ 180 degrés dans l'espace HSV. 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!