Opencv использует imread и вектор имен файлов QString для загрузки изображений

#qt #opencv #c 11 #qstring

#qt #opencv #c 11 #qstring

Вопрос:

Я пытался прочитать некоторые изображения в цикле, используя imread в вектор Mat (изображения) с opencv, получая имена файлов из вектора QString , но он не будет компилироваться. Я знаю QString , что проблема в моем формате, но, похоже, не могу ее решить. Я также пробовал … image = imread( image_vector[i] ); … и несколько других способов. Любая помощь приветствуется.

 for ( unsigned int i = 0; i < image_names.size(); i   )
{ 
    image = imread( image_names.data()->at(i) );

    if( !image.data )
    {
        qDebug()<< "Error";
    }
    else
    {
         image_vector.push_back( image );
    }
}
  

Комментарии:

1. Что находится внутри image_vector ? Похоже, вы одновременно считываете имена файлов из него, а также добавляете к нему cv-матрицы?

2. Извините, я ввел неправильные имена, я отредактировал.

3. попробуйте что-то вроде image_names[i].toStdString().c_str() .

4. Объявление imread таково: CV_EXPORTS_W Mat imread( const stringamp; filename, int flags=1 ); итак, если image_names это массив или вектор QString, вы должны использовать: image = imread( image_names[i].toStdString() );

5. Правильно: image_names.data() возвращает указатель QString * и image_names.data()->at(i) возвращает i-й QChar первой QString вектора.

Ответ №1:

Для использования imread вы должны передать std::string ему.

 Mat imread( const std::stringamp; filename, int flags=1 );
  

В вашем случае image_names vector<QString> таков правильный код :

 image = imread( image_names[i].toStdString());