Debug Assertion Failed Expression: _pFirstBlock == pHead mit OpenCV und C++ zu versuchen, rufen Sie SurfFeatureDetector
Habe ich diese Funktion in C++ mit OpenCV:
vector<KeyPoint> test(Mat img)
{
int minHessian = 400;
SurfFeatureDetector detector( minHessian );
vector<KeyPoint> vKeypoints;
detector.detect( img, vKeypoints );
return vKeypoints;
}
Wenn ich rufen Sie diese Funktion in meiner main-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 rufe diese Methode zweimal...
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;
}
...Bekomme ich die folgende Fehlermeldung:
Kann mir jemand sagen wo mein Fehler ist und wie ich dieses Problem beheben könnte? Ich brauche Sie zum aufrufen dieser Funktion zweimal mit zwei verschiedenen Bildern, aber jedes mal, wenn ich das mache bekomme ich diesen Fehler.
Ich bin mit Visual Studio 2012.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich gefunden, mein Fehler. Ich habe versehentlich kopiert die openCV-dlls des VC12-Ordner, weil ich vergaß, dass Visual Studio 2012 ist VC11. Jetzt funktioniert es. Vielleicht hilft es jemand anderem, der das selbe problem hat und kopiert die dlls im falschen Ordner.
Hatte ich auch die gleichen Debug Assertion Failed (dbgheap.Linie c:1424 Ausdruck: _pFirstBlock == pHead). Ich benutze Visual Studio 2012 Professional (vc11) kompiliert mit OpenCV 2.4.9.
Mein Fehler ist, dass ich die system-variable PATH OpenCV x64 Pfad (c:\opencv\build\x64\vc11\bin aber ich verknüpfte meinen code mit x86-libs in VC2012 Projekt.
Nach einer Neudefinition der PATH-variable in Windows zu beheben OpenCV x86 Pfad (c:\opencv\build\x86\vc11\bin) und starten Sie in meinem VC2012, die Behauptung gescheitert dbgheap.c(1424) nicht wieder passiert.
@TheMotivation, Deine Antwort hat mich inspiriert. Danke.
Es ist Bibliothek problem,in meinem Fall änderte sich die Projekt-Eigenschaft "Verwendung von mfc" von den statischen zu den "Use MFC in a Shared DLL" den trick tun.