2011-05-03 52 views
2

我想要做一些像eigenfaces但有不同的图像(不是面孔)。我有一个图像矢量,images。从这些图像中,我想制作一个Mat对象,其中每个行包含一个作为行向量写出的图像,其中包含data。这是我试图做的:使用开放式CV迭代器段落错误

// 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! 
    } 
} 

帮助!

谢谢!

回答

1

我认为在你的矩阵中每个字段有1个字节(CV_8UC1),但你的迭代器是“无符号短”迭代器。无符号短通常有2个字节。将其更改为

data.begin<unsigned char>() 

还要检查stdint.h:http://en.wikipedia.org/wiki/Stdint.h

+0

是的,这似乎是它。现在我感到跛脚:P谢谢! – 2011-05-04 05:14:23