Extraire des données à partir de Point2f
Je suis l'élaboration d'un code qui doit trouver une pièce rouge. Je suis l'aide de la fonction minEnclosingCircle
afin d'obtenir le centre de l'image.
La façon que la fonction me donne le centre est dans un format vectoriel vector<Point2f>center( contours.size() );
. Cependant j'ai besoin de ces données pour déterminer une région d'intérêt (ROI). Est-il possible que je peux extraire les données à partir de le point, de sorte que je peux avoir deux coordonnées X et Y dans un entier?
Merci!
--update--
Je vais poster un peu de code pour essayer de mieux expliquer ce que je veux faire:
vector<vector<Point> > contours_poly( contours.size() );
vector<Point2f>center( contours.size() );
vector<float>radius( contours.size() );
for( int i = 0; i < contours.size(); i++ )
{
approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );
minEnclosingCircle( (Mat)contours_poly[i], center[i], radius[i] );
}
Donc, une fois que je reçois les contours de mon image j'applique la fonction minEnclosingCicrle
pour déterminer le centre. Je suis très nouveau dans OpenCV. Je suppose que le centre des cercles qu'il trouve est enregistré dans ce vecteur de Point2f. La chose que je veux faire est de l'accès à ces points dans l'ordre pour obtenir la position de mon objet déterminé un ROI autour de l'objet.
- ces docs la revendication
minEnclosingCircle
vous donne un centre et un rayon pour un ensemble donné de points d'entrée. Quelles sont les données exactement êtes-vous essayer de l'extrait? - j'ai mis à jour la description de mon problème.
- Si vous avez beaucoup de cercle de centres. Que voulez-vous faire avec cette information?
- Je reçois certains cercles, puis-je comparer. J'ai garder le plus grand parce que c'est celui qui m'intéresse. Supposons que je reçois 20 cercles et je sais que le cercle de 15 est le plus grand. Je veux savoir de position X et Y du centre[15], qui est un point2f mais à l'intérieur d'un vecteur. Avec cette information, je vais faire une région d'intérêt autour de mon objet.
- OK, voir ma réponse.
Vous devez vous connecter pour publier un commentaire.
De vos commentaires
sans la vérification des limites:
avec la vérification des limites:
Concernant les limites de la vector, si l'indice est
>= center.size()
, vous êtes hors des limites du terrain. Ainsi, vous pouvez faire la vérification de vous-même:Noter que l'indexation commence à
0
, alors là, vous accédez à la 16ème point.[]
opérateur, vous obtenez un comportement indéterminé, ce qui signifie que votre programme pourrait ne tout, notamment en effectuant sur la production de résultats de la merde. Si vous allez au-delà des limites de l'aideat()
, vous aurez une exception, qui, à moins d'géré par, permettrait de mettre fin au programme.Si vous utilisez l'IDE, alors vous pouvez simplement taper quelque chose comme
IDE et vous aidera à remplir le champ propre de la classe.
Si vous vous écrire un programme sans smart auto completion que vous pouvez juste regarder dans le code source de opencv pour voir (cette partie du code est de opencv source et distribué sous la licence que vous pouvez trouver dans opencv site web et les codes source):
minEnclosingCircle retourne un centre Point2f et un rayon, pas sûr de savoir comment vous êtes l'obtention d'un vecteur..?
Dans tous les cas, vous pouvez accéder aux coordonnées d'un Point2f directement car ils sont membres du public.