2011-05-03 2 views
2

eigenfaces과 같은 작업을하고 싶지만 얼굴이 아닌 다른 이미지를 사용하고 싶습니다. 벡터 이미지가 images입니다. 이 이미지에서 인 Mat 오브젝트를 행마다 벡터로 작성된 이미지로 만들고 싶습니다. 이것이 내가 시도한 것입니다 :공개 CV 반복자 사용 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! 
    } 
} 

도움말!

감사!

답변

1

각 필드에 1 바이트 (CV_8UC1)의 매트릭스가 있지만 iterator는 "unsigned short"반복기라고 생각합니다. 부호없는 짧은 보통에는 2 바이트가 있습니다. http://en.wikipedia.org/wiki/Stdint.h

+0

그래 그게 것 같다 : 또한 stdint.h을 확인

data.begin<unsigned char>() 

로 변경. 이제 저는 절름발이입니다 : P 고마워! –