Détection d'une feuille de papier (détection de carrés) à l'aide d'OpenCV
Problème initial :
Un développeur a implémenté avec succès l'exemple de détection de carrés OpenCV, mais la sortie est encombrée de contours inutiles. L'objectif est de filtrer les résultats pour obtenir les quatre coins d'une feuille de papier pour un traitement ultérieur.
Solution proposée :
L'extrait de code fourni détecte les carrés en utilisant plusieurs niveaux de seuil et élimine les trous potentiels entre les segments de bord grâce à la dilatation. Cependant, il ne filtre pas le désordre. Pour résoudre ce problème, modifiez la fonction find_squares comme suit :
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 }
Sortie finale :
Après avoir appliqué cette modification, les carrés vectoriels résultants ne contiendront que les quatre les coins de la feuille de papier détectée constituent le plus grand carré de l'image. Cela peut ensuite être utilisé pour la réduction de l'inclinaison ou pour d'autres tâches de traitement d'image.
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!