Debug Assertion Failed Expression: _pFirstBlock == pHead using OpenCV and C++ trying to call SurfFeatureDetector
Asked Answered
D

3

8

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:

enter image description here

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.

Drugge answered 21/1, 2014 at 15:2 Comment(0)
D
9

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.

Drugge answered 23/1, 2014 at 7:0 Comment(0)
R
5

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.

Rattray answered 2/8, 2014 at 18:24 Comment(0)
N
0

It is library problem,in my case changed the project property "Use of mfc" from static to "Use MFC in a Shared DLL" do the trick.

Nereen answered 13/4, 2018 at 5:10 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.