Erkennen eines Blattes Papier (Quadraterkennung) mit OpenCV
Anfängliches Problem:
Ein Entwickler hat das OpenCV-Beispiel zur Quadraterkennung erfolgreich implementiert, aber die Ausgabe ist mit unnötigen Konturen übersät. Das Ziel besteht darin, die Ergebnisse zu filtern, um die vier Eckpunkte eines Blattes Papier zur weiteren Verarbeitung zu erhalten.
Vorgeschlagene Lösung:
Das bereitgestellte Code-Snippet erkennt Quadrate mithilfe von mehrere Schwellenwerte und eliminiert mögliche Löcher zwischen Kantensegmenten durch Dilatation. Es filtert die Unordnung jedoch nicht heraus. Um dieses Problem zu lösen, ändern Sie die Funktion find_squares wie folgt:
void find_squares(Mat& image, vector<vector<Point> >& squares) { ... [code as before] ... // Filter out unnecessary contours and store the largest square vector<Point> largestSquare; double maxArea = 0; for (auto& square : squares) { double area = fabs(contourArea(Mat(square))); if (area > maxArea) { maxArea = area; largestSquare = square; } } squares.clear(); // Clear existing squares vector squares.push_back(largestSquare); // Store the largest square }
Endgültige Ausgabe:
Nach Anwendung dieser Änderung enthalten die resultierenden Vektorquadrate nur die vier Eckpunkte des erkannten Blattes Papier als größtes Quadrat im Bild. Dies kann dann zur Skew-Reduktion oder für weitere Bildverarbeitungsaufgaben verwendet werden.
Das obige ist der detaillierte Inhalt vonWie kann OpenCV optimiert werden, um die vier Ecken eines Blattes Papier genau zu erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!