Calcul des moyennes pour les vecteurs de points
J'ai un vecteur de dimensions 2 points dans OpenCV
std::vector<cv::Point2f> points;
Je voudrais calculer la moyenne des valeurs pour les coordonnées x et y dans points
. Quelque chose comme:
cv::Point2f mean_point; //will contain mean values for x and y coordinates
mean_point = some_function(points);
Ce serait simple dans Matlab. Mais je ne suis pas sûr si je peux utiliser certaines de haut niveau OpenCV fonctions pour accomplir la même. Des suggestions?
Pourquoi n'est-ce pas une boucle for?
Je peux utiliser une boucle for. Mais je me demandais si il ya un niveau élevé de la fonction dans OpenCV ou les mst bibliothèque pour faire de même.
Je peux utiliser une boucle for. Mais je me demandais si il ya un niveau élevé de la fonction dans OpenCV ou les mst bibliothèque pour faire de même.
OriginalL'auteur Alexey | 2012-07-19
Vous devez vous connecter pour publier un commentaire.
InputArray
fait un bon travail ici. Vous pouvez simplement appelerDétails:
Dans la nouvelle version d'OpenCV versions, la
InputArray
type de données est introduit. De cette façon, on peut envoyer des paramètres à une fonction OpenCV soit les matrices (cv::Mat), soit des vecteurs. Unvector<Vec3f>
sera interprété comme un float matrice avec trois canaux, une ligne, et le nombre de colonnes égal au vecteur de taille. Car aucune donnée n'est copié, cette transparence de conversion est très rapide.L'avantage est que vous pouvez travailler avec ce type de données s'adapte mieux à votre application, alors vous pouvez toujours utiliser OpenCV fonctions pour faciliter les opérations mathématiques sur elle.
cv::Point2f mean(mean_(0), mean_(1));
n'a pas fonctionné.Celui-ci devrait:
cv::Point2f mean(mean_.at<float>(0), mean_.at<float>(1));
testé, il fonctionne. double vérification
cv:reduce(...)
paramètres doivent êtrecv::reduce(points, mean_, CV_REDUCE_AVG, 1);
, thx.Ok, merci pour le contrôle. Je vais mettre à jour ma réponse.
Peut-être que la définition a changé, mais à l'heure actuelle est de réduire
void reduce(InputArray src, OutputArray dst, int dim, int rtype, int dtype=-1 )
docs.opencv.org/modules/core/doc/... - rtype vient après dim, donc ça devrait êtrecv::reduce(points, mean_, 1, CV_REDUCE_AVG);
je pense que certaines autres modifications sont nécessaires pour rendre cette course sans exceptions je vais suivre avec.OriginalL'auteur Sam
Depuis OpenCV est
Point_
définit déjàoperator+
, ce devrait être assez simple. Tout d'abord nous somme des valeurs:Ensuite, nous divisons afin d'obtenir la moyenne:
...ou nous pourrions utiliser
Point_
'soperator*
:Malheureusement, au moins aussi loin que je peux voir,
Point_
ne définit pasoperator /
, nous avons donc besoin de multiplier par l'inverse au lieu de diviser par la taille.OriginalL'auteur Jerry Coffin
Vous pouvez utiliser la stl std::accumulate comme suit:
Quelle est la distinction? La moyenne est un synonyme de la moyenne arithmétique.
OriginalL'auteur smocking
Ajouter tout en haut et les diviser par le nombre total de points.
OriginalL'auteur jrad