У меня есть эта функция в 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.
Я нашел свою ошибку. Я случайно скопировал 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».