Ошибка переполнения буфера на CascadeTraining.exe

0

Я тренирую cascadeclassifier и возникла странная проблема. Это произошло в tempStage->write( fs, Mat() ); в следующем коде.

        CvCascadeBoost* tempStage = new CvCascadeBoost;
        // save current stage
        char buf[10];
        sprintf(buf, "%s%d", "stage", i );
        filename = dirName + buf + ".xml";
        FileStorage fs( filename, FileStorage::WRITE );
        if ( !fs.isOpened() )
        {
            cout << "Current stage can not be written, because file " << filename
                    << " can not be opened." << endl;
            return false;
        }
        fs << FileStorage::getDefaultObjectName(filename) << "{";
        tempStage->write( fs, Mat() );
        fs << "}";

Ошибка OpenCV

OpenCV Error: Unspecified error (No element name has been given) in unknown func
tion, file D:\Lib\OpenCV_Lib_2.4.6\include\opencv2/core/ope
rations.hpp, line 2908

Что может быть неправильным? Когда я проверяю fs, у него много неспособных читать сообщения памяти, как показано на прилагаемом рисунке.

благодаря

Изображение 174551

  • 0
    Возможное переполнение буфера здесь: char buf[10]; sprintf(buf, "%s%d", "stage", i ); Если это целое число больше 5 цифр, вы переполните буфер.
Теги:
opencv

1 ответ

0

подпись CvCascadeBoost::write:

void CvCascadeBoost::write( FileStorage &fs, const Mat& featureMap ) const

и вы передали ему пустую матрицу, что должно быть неправильно.

  • 0
    Я нашел проблему в FileStorage. Раньше я использовал исходные файлы и делал свою собственную программу exe. Теперь я использовал opencv_trainedclassifier.exe из папки bin, и он работает. Я все еще проверяю, почему FileStorage имеет проблемы.
  • 0
    Привет, opencv_trainedclassifier.exe поставляется с исходным кодом?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню