2016-07-01 2 views
0

Я создал вектор std::vector<cv::Mat> main_layers;, помещенный в класс. Вектор еще не инициирован. У меня также есть открытый участник cv::Mat source;, инициированный в списке инициаторов конструктора. Теперь у меня есть метод копирования для копирования сегментов изображения в main_layers:Как заполнить вектор изображениями в OpenCV? C++

void copy(){ 
    Rect roi;   
    auto primarySegment = main_layers.begin(); 
    for (int c = 0; c< primaryKernelsLoad; c++) 
     { 
     if (heightPriority) 
      { 
      roi = Rect(0, c, size.width, segment1Size); 
      source(roi).copyTo(primarySegment); 
      auto nx = std::next(primarySegment, 2); 
      } 
     }; 
    }; 

Здесь у меня есть ошибка: gaussian.cpp(133): error C2664: 'void cv::Mat::copyTo(cv::OutputArray) const' : cannot convert parameter 1 from 'std::_Vector_iterator<_Myvec>' to 'cv::OutputArray' на линии с CopyTo. Как я могу получить массив из текущего изображения в векторе? Что касается C++ 98, с помощью Visual Studio 2010.

+0

Эта проблема может быть легко решена с помощью 'источника (КОРОЛЬ) .copyTo (* primarySegment);' Итератор в основном указатель на элемент, поэтому вам нужно разыменовать его. –

+0

BTW, 'auto' и' std :: next' из C++ 11, поэтому вы не должны использовать их, если хотите решение на C++ 98. –

+0

@Ken: Ну, это скомпилировано с * primarySegment. Мне просто интересно, что Visual Studio 2010 скомпилировал C++ 11 - как я думал, VS2010 имеет стандарты C++ 98. Но если он скомпилирован без проблем, тогда все в порядке. Спасибо, вы можете отправить его в качестве ответа, чтобы я мог подняться. –

ответ

0

отлично работает

void copy(){ 
    Rect roi;   
    for (int c = 0; c< primaryKernelsLoad; c++) 
     { 
     if (heightPriority) 
      { 
      roi = cv::Rect(0, c, size.width, segment1Size); 
      main_layers.push_back(source(roi)); 
      } 
     }; 
}; 
Смежные вопросы