Problem:
Angenommen, ein Bild enthält ein rotes Rechteck, die Aufgabe besteht darin, die Erkennungsgenauigkeit der roten Farbe mithilfe der cv::inRange-Methode von OpenCV innerhalb des HSV-Farbraums zu verbessern.
Ursprünglicher Ansatz:
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 );
Dieser Ansatz bietet unbefriedigende Ergebnisse.
Verbesserte Lösung:
Der ursprüngliche Ansatz berücksichtigt nicht die „Umhüllung“ der roten Farbe um 180 Grad im HSV-Raum. Um dies zu beheben, muss der H-Bereich sowohl [0,10] als auch [170, 180] umfassen.
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;
Dieser aktualisierte Ansatz führt zu verbesserten Erkennungsergebnissen.
Alternative Vorgehensweise:
Eine weitere effiziente Methode ist:
Mat3b bgr_inv = ~bgr; inRange(hsv_inv, Scalar(90 - 10, 70, 50), Scalar(90 + 10, 255, 255), mask); // Cyan is 90
Dieser alternative Ansatz ermöglicht eine Einzelbereichsprüfung und liefert zufriedenstellende Ergebnisse.
Das obige ist der detaillierte Inhalt vonWie kann die Genauigkeit der Erkennung roter Objekte im HSV-Farbraum mit OpenCV verbessert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!