Paramètres pour le Savant et approxPolyDP dans le polygone de détection
Je suis un nouveau dans OpenCV. Je sais qu'il existe beaucoup de façons pour détecter les contours des polygones. Mais est la façon qui me donne une solution quand j'ai essayer de détecter les contours de polygones que j'ai dessiné?.
P. S. Désolé pour mon anglais...
Mon code:
Mat src = imread("C:/Users/Nickolay/Desktop/1.jpg");
resize(src, src, Size(400, 400), 0, 0, INTER_CUBIC);
if (src.empty())
{
cout << "Cannot load image!" << endl;
return -1;
}
//================================
Mat gray;
cvtColor(src, gray, CV_BGR2GRAY);
Mat bw;
Canny(gray, bw, 800, 850, 5, true);
imshow("canny", bw);
vector<vector<Point>> countours;
findContours(bw.clone(), countours, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
vector<Point> approx;
Mat dst = src.clone();
for(int i = 0; i < countours.size(); i++)
{
approxPolyDP(Mat(countours[i]), approx, arcLength(Mat(countours[i]), true) * 0.01, true);
if (approx.size() >= 4 && (approx.size() <= 6))
{
int vtc = approx.size();
vector<double> cos;
for(int j = 2; j < vtc + 1; j++)
cos.push_back(Angle(approx[j%vtc], approx[j-2], approx[j-1]));
sort(cos.begin(), cos.end());
double mincos = cos.front();
double maxcos = cos.back();
if (vtc == 4)//&& mincos >= -0.5 && maxcos <= 0.5)
{
Rect r = boundingRect(countours[i]);
double ratio = abs(1 - (double)r.width / r.height);
line(dst, approx.at(0), approx.at(1), cvScalar(0,0,255),4);
line(dst, approx.at(1), approx.at(2), cvScalar(0,0,255),4);
line(dst, approx.at(2), approx.at(3), cvScalar(0,0,255),4);
line(dst, approx.at(3), approx.at(0), cvScalar(0,0,255),4);
SetLabel(dst, "RECT", countours[i]);
}
}
}
//================================
imshow("source", src);
imshow("detected lines", dst);
waitKey(0);
return 0;`
Ma question est comment faire pour détecter les contours de polygones que j'ai dessiné en utilisant opencv?Dans les photos ci-joint, j'ai utilisé les fonctions d'opencv, mais au lieu de 5 attendu rectangles j'ai eu seulement 3.
Je ne comprends pas ce que votre question est. Et, habituellement, il n'est pas anglais, mais la façon dont vous pensez à votre problème. Il suffit de regarder votre question et de penser comment vous résoudre la question de savoir si vous êtes une personne de répondre.
Ma question est comment faire pour détecter les contours de polygones que j'ai dessiné en utilisant opencv?
Dans les photos ci-joint, j'ai utilisé les fonctions d'opencv, mais au lieu de 5 attendu rectangles j'ai eu seulement 3.
Que sont les "Angle" et "SetLable" dans votre code? Ils sont présentés comme ne peut pas être identifié
Ma question est comment faire pour détecter les contours de polygones que j'ai dessiné en utilisant opencv?
Dans les photos ci-joint, j'ai utilisé les fonctions d'opencv, mais au lieu de 5 attendu rectangles j'ai eu seulement 3.
Que sont les "Angle" et "SetLable" dans votre code? Ils sont présentés comme ne peut pas être identifié
OriginalL'auteur Rougher | 2014-04-08
Vous devez vous connecter pour publier un commentaire.
Le problème peut-être vous êtes directement en passant le bord de l'image pour trouver le contour, qui peut contenir de nombreux etrangers bords.
Donc, avant de trouver contour appliquer La Morphologie Des Transformations.
comme,
Voir le résultat.
Rectangle de délimitation pour les contours
approxPolyDP pour les contours
OriginalL'auteur Haris
Vous pouvez également essayer de seuil de trouver les bords, au lieu de Savant.
OriginalL'auteur user2277773