Выражение сбоя утверждения отладки: _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.
3 ответа
Я нашел свою ошибку. Я случайно скопировал openCV-dll из папки VC12, потому что я забыл, что Visual Studio 2012 - это VC11. Теперь это работает. Может быть, это поможет кому-то, кто имеет ту же проблему и скопировал dll из неправильной папки.
У меня также был тот же сбой отладочного утверждения (строка 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, Ваш ответ вдохновил меня. Спасибо.
Это проблема библиотеки, в моем случае изменившее свойство проекта "Использование mfc" со статического на "Использовать MFC в общей DLL".