2011-05-03 3 views
2

Je veux faire quelque chose comme eigenfaces mais avec des images différentes (pas des visages). J'ai un vecteur d'images, images. A partir de ces images, je souhaite créer un objet Mat, data qui contient dans chaque ligne une image écrite en tant que vecteur ligne. Voilà ce que j'ai essayé de faire:Utilisation d'Open CV Iterators segfault

// This is basically a matrix that needs to have a bunch of images as rows. 
Mat data(numImages, IMAGE_SIZE * IMAGE_SIZE, CV_8UC1); 
// I also replaced CV_8U by images[0].type() and CV_8U. no change 
MatIterator_<unsigned short> iter = data.begin<unsigned short>(), 
          iter_end = data.end<unsigned short>(), 
          iter2; 

for (i = 0; i < numImages; ++i) 
{ 
    MatIterator_<unsigned short> begin = images[i].begin<unsigned short>(); 
    MatIterator_<unsigned short> end = images[i].end<unsigned short>(); 
    for (iter2 = begin; iter2 != end; iter2++) 
    { 
     *iter = *iter2; // Segfault is here. 
     if (iter != iter_end) // safety check 
      iter++; 
     else 
      perror("Screwed!\n"); // This does not execute! 
    } 
} 

Aide!

Merci!

Répondre

1

Je pense que dans votre matrice chaque champ a 1 octet (CV_8UC1), mais votre itérateur est un itérateur «non signé court». Non signé court habituellement a 2 octets. changer pour

data.begin<unsigned char>() 

également vérifier stdint.h: http://en.wikipedia.org/wiki/Stdint.h

+0

ouais qui semble l'être. Maintenant je me sens boiteux: P merci! –