1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
/*
********************************Rechercher et dessiner le cercle maximum inscrit.**********************************
*/
//Dessiner le rectangle englobant le contour le plus large.
//Pour limiter la zone de la recherche du centre et du rayon du cercle.
Rect recta = boundingRect(allContours[maxIndex]);
rectangle(fluxCamera , recta , Scalar(255,0,0) , 1 , 8 , 0 );
//Une fois le rectangle trouvé, on détermine la zone de recherche.
int startX = recta.tl().x;
int startY = recta.tl().y;
int endX = recta.tl().x + recta.width;
int endY = recta.tl().y + recta.height;
//Décalaration des variables qui vont contenir le centre et le rayon.
Point2f centroideOfMaxInscribedCircle;
float raduisOfMaxInscribedCircle = -1.0;
//variable de comparaison.
float distance;
//Recherche du rayon et du centre.
for (int x = startX ; x <= endX ; x++)
{
for(int y = startY ; y <= endY ; y++)
{
distance = pointPolygonTest(allContours[maxIndex], Point(x,y),true);
if (raduisOfMaxInscribedCircle < distance)
{
raduisOfMaxInscribedCircle = distance;
centroideOfMaxInscribedCircle = Point(x,y);
}
}
}
//Dessiner le cercle.
circle(fluxCamera , centroideOfMaxInscribedCircle , (int)raduisOfMaxInscribedCircle , Scalar(255,255,0) , 2);
circle(fluxCamera , centroideOfMaxInscribedCircle , 2 , Scalar(255,255,0) , 2);
/***************************************************************************************************************************************/ |
Partager