J'essaie actuellement de créer un programme qui trouve les bords d'un reçu, puis le recadre en conséquence. J'ai utilisé ce code pour le faire:Recherche des plus grands contours C++
vector<vector<cv::Point> > contours;
vector<Vec4i> hierarchy;
findContours(edged, contours, hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
sort(contours.begin(), contours.end(), compareContourAreas);
vector<cv::Point> target;
for(int i = 0; i < contours.size(); i++){
vector<cv::Point> c = contours[i];
double p = arcLength(c, true);
vector<cv::Point> approx;
approxPolyDP(c, approx, 0.02*p, true);
if (approx.size() == 4) {
target = approx;
break;
}
}
Ce code trouve les contours très bien, mais ne les filtre pas correctement. Par exemple, les images suivantes:
L'image à gauche représente tous les contours alors que l'image à droite représentent juste la cible. Je me demande comment je peux changer mon code pour que je reçoive toujours les bords du reçu pour la cible.
Couleur Segmentez l'image et trouvez les contours. Pas besoin de bords. ** vector plus grand = contours [contours.size() - 1] ** vous obtient le glissement blanc après le tri. Vous pouvez utiliser ** boundingRect (contours [i]) ** si vous avez besoin de points rectangle hors du contour. –