I have this function in C++ using OpenCV:
vector<KeyPoint> test(Mat img)
{
int minHessian = 400;
SurfFeatureDetector detector( minHessian );
vector<KeyPoint> vKeypoints;
detector.detect( img, vKeypoints );
return vKeypoints;
}
When I call this function in my main-method everything works fine.
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;
}
But as soon as I'm calling this method twice...
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;
}
...I get the following error:
Can anyone tell me where my mistake is and how I could fix this? I need to call this function twice with two different images, but every time I do this I get this error.
I'm using Visual Studio 2012.
I've found my mistake. I accidentally copied the openCV-dlls of the VC12 folder, because I forgot that Visual Studio 2012 is VC11. Now it works. Maybe this will help someone else who has the same problem and copied the dlls of the wrong folder.
I also had the same Debug Assertion Failed (dbgheap.c Line:1424 Expression: _pFirstBlock == pHead). I am using Visual Studio 2012 Professional (vc11) to compile with 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()
}
My mistake is that I set the system PATH variable to OpenCV x64 path (c:\opencv\build\x64\vc11\bin) but I linked my code with x86 libs in VC2012 project.
After redefine the PATH variable in Windows to correct OpenCV x86 path (c:\opencv\build\x86\vc11\bin) and restart my VC2012, the Assertion failed of dbgheap.c(1424) will not happened again.
@TheMotivation, Your answer inspired me. Thank you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With