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

У меня есть эта функция в C ++ с использованием 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.

7

Решение

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

8

Другие решения

У меня также была та же ошибка подтверждения отладки (строка 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 path (c: \ opencv \ build \ x64 \ vc11 \ bin), но я связал свой код с библиотеками x86 в проекте VC2012.

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

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

5

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

0
По вопросам рекламы [email protected]