2009-08-30 4 views
1

Eh bien, j'ai très probablement un problème extrêmement stupide mais ne pouvait pas le comprendre et je suis sur le point de perdre ma santé mentale espère que quelqu'un peut aiderC++ vecteurs Problème

vector<CvMat*> sample; 
for(int x = 0; x < 29; x += 2) 
{ 
    for(int b = 0; b < 22; b += 2) 
    { 
     cvmSet(g, 0, b, cvmGet(NormalVector, 0, x + b)); 
     cvmSet(g, 0, b + 1, cvmGet(NormalVector, 0, x + b + 1)); 
    } 
    sample.push_back(g); 
} 

bien im en utilisant OpenCV pour certains calculs de la matrice basiacllay ce Je suis en train de créer quelques petites matrices à partir d'une grande matrice et de les mettre dans un vecteur appelé "échantillon" ici. La première boucle est juste une chose basée sur un compteur et une deuxième boucle pour créer les petites matrices après la deuxième boucle. au vecteur

Mais le problème est après ces boucles quand j'essaie d'atteindre l'une des matrices dans le ve ctor je prends toujours celui qui a été mis dans le vecteur enfin. J'utilise ces méthodes pour accéder aux éléments vectoriels
échantillon [0];
échantillon.at (6);
Pour ces deux je reçois la même matrice qui a été ajoutée au vecteur à la fin. Quelle est la chose que je fais mal?

Répondre

4

Étant donné que votre vecteur sample est une liste de pointeurs , vous devez vous assurer que vous créez une nouvelle instance de CvMat pour chaque élément que vous ajoutez au vecteur. Sinon, il semble que tous vos éléments pointent vers la même chose (g).

Si CvMat a un constructeur de copie, vous pouvez être en mesure de le réparer en faisant ceci:

vector <CvMat> sample; 
for(int x =0 ; x<29; x+=2) { 
    // ... 
    sample.push_back(*g); 
} 

Cela crée un vecteur de CvMatobjets et le push_back(*g) fait une copie de la matrice et pousse le sur le dos du vecteur.

+0

thx je l'ai maintenant – Emre

0
vector < CvMat*> sample; 

est un vecteur de pointeurs vers CvMat, et vous poussent « continously g » en elle. Vous devez créer de nouvelles instances de CvMat et les ajouter à votre vecteur, sans y ajouter 'g' à chaque fois.

+0

ahhh Je l'ai eu. comment ça m'a manqué? merci – Emre