Выражение ошибки утверждения отладки: _pFirstBlock == pHead с использованием OpenCV и C++ пытается вызвать SurfFeatureDetector

У меня есть эта функция на С++ с использованием OpenCV:

vector<KeyPoint> test(Mat img)
{
  int minHessian = 400;
  SurfFeatureDetector detector( minHessian );

  vector<KeyPoint> vKeypoints;
  detector.detect( img, vKeypoints );

  return vKeypoints;
}

Когда я вызываю эту функцию в своем основном методе, все работает нормально.

int main( int, char** argv )
{
    // path to a image-file
    char* input = "image.jpg";

    // read image into Mat img
    Mat img = imread( input, CV_LOAD_IMAGE_GRAYSCALE );

    // call function test
    test(img);

    waitKey(0);
    return 0;
}

Но как только я вызываю этот метод дважды...

int main( int, char** argv )
{
    // path to a image-file
    char* input = "image.jpg";

    // read image into Mat img
    Mat img = imread( input, CV_LOAD_IMAGE_GRAYSCALE );

    // call function test
    test(img);
    test(img); // <-- !!! second call

    waitKey(0);
    return 0;
}

... Я получаю следующую ошибку:

введите здесь описание изображения

Может ли кто-нибудь сказать мне, где моя ошибка и как я могу это исправить? Мне нужно дважды вызвать эту функцию с двумя разными изображениями, но каждый раз, когда я это делаю, я получаю эту ошибку.

Я использую Visual Studio 2012.


person Mickey    schedule 21.01.2014    source источник


Ответы (3)


Я нашел свою ошибку. Я случайно скопировал openCV-dll из папки VC12, потому что забыл, что Visual Studio 2012 — это VC11. Теперь это работает. Возможно, это поможет кому-то еще, у кого такая же проблема, и он скопировал dll не в ту папку.

person Mickey    schedule 23.01.2014

У меня также была такая же ошибка утверждения отладки (строка dbgheap.c: выражение 1424: _pFirstBlock == pHead). Я использую Visual Studio 2012 Professional (vc11) для компиляции с OpenCV 2.4.9.

int main(){
    SurfFeatureDetector detector(50);
    std::vector<KeyPoint> keypoints[502];
    //In my case, some ranges in for-loop may success without Assertion failed.
    for(int j=0;j<502;j++){
        sprintf(filename, "../../%06d.bmp", j);
        img[j] = imread(filename);
        detector.detect(img[j], keypoints[j]);
        waitKey(10);
    }
    printf("leaving main()\n");
    //Debug Assertion Failed after leaving main()
}

Моя ошибка в том, что я установил системную переменную PATH на путь OpenCV x64 (c:\opencv\build\x64\vc11\bin), но я связал свой код с библиотеками x86 в проекте VC2012.

После переопределения переменной PATH в Windows для исправления пути OpenCV x86 (c:\opencv\build\x86\vc11\bin) и перезапуска моего VC2012 ошибка утверждения dbgheap.c(1424) больше не повторится.

@TheMotivation, твой ответ вдохновил меня. Спасибо.

person jsyeh    schedule 02.08.2014

Это проблема с библиотекой, в моем случае изменено свойство проекта «Использование mfc» со статического на «Использовать MFC в общей DLL».

person user3458990    schedule 13.04.2018