2014-01-21 4 views
7

Ich habe diese Funktion in C aufrufen ++ OpenCV mit:Debug Assertionsfehler Expression: _pFirstBlock == pHead mit OpenCV und C++ versucht SurfFeatureDetector

vector<KeyPoint> test(Mat img) 
{ 
    int minHessian = 400; 
    SurfFeatureDetector detector(minHessian); 

    vector<KeyPoint> vKeypoints; 
    detector.detect(img, vKeypoints); 

    return vKeypoints; 
} 

Wenn ich nenne diese Funktion in meinem Haupt-Methode funktioniert alles einwandfrei.

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; 
} 

Aber sobald ich zweimal diese Methode bin Aufruf ...

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; 
} 

... Ich erhalte den folgenden Fehler:

enter image description here

Kann mir jemand sagen, wo ist mein Fehler und wie könnte ich das beheben? Ich muss diese Funktion zweimal mit zwei verschiedenen Bildern aufrufen, aber jedes Mal, wenn ich das mache, erhalte ich diesen Fehler.

Ich verwende Visual Studio 2012.

Antwort

8

Ich habe meinen Fehler gefunden. Ich habe versehentlich die openCV-DLLs des VC12-Ordners kopiert, weil ich vergessen habe, dass Visual Studio 2012 VC11 ist. Jetzt funktioniert es. Vielleicht hilft das jemand anderem, der das gleiche Problem hat und kopiert die DLLs des falschen Ordners.

5

Ich hatte auch die gleiche Debug Assertion Failed (Dbgheap.c Line: 1424 Ausdruck: _pFirstBlock == pHead). Ich verwende Visual Studio 2012 Professional (vc11), um mit OpenCV 2.4.9 zu kompilieren.

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() 
} 

Mein Fehler ist, dass ich die Systemvariable PATH auf OpenCV x64 Pfad festgelegt (c: \ opencv \ bauen \ x64 \ VC11 \ ist), aber ich meinen Code mit x86-libs in VC2012 Projekt verknüpft.

Nachdem die PATH-Variable in Windows neu definiert wurde, um den OpenCV x86-Pfad zu korrigieren (c: \ opencv \ build \ x86 \ vc11 \ bin) und mein VC2012 neu gestartet wurde, ist die Assertion von dbgheap.c (1424) nicht erneut aufgetreten.

@TheMotivation, Ihre Antwort hat mich inspiriert. Vielen Dank.