2011-09-29 11 views
6

Sto provando a compilare lo facedetect.cpp nella cartella OpenCV \ Samples \ C, in Visual Studio 2010. Il progetto si compila e inizia bene, mostra un'anteprima della mia macchina fotografica , e quindi sembra bloccarsi a cascade.detectMultiScale() non appena rileva una faccia. Ho concluso che OpenCV pensa che io sia troppo brutto.OpenCV 2.1: facedetect.cpp si arresta in modo anomalo quando trova una brutta faccia

Unhandled exception at 0x100342bf in HeadTrackerExample.exe: 0xC0000005: Access violation writing location 0x00000000.

Purtroppo informazioni di debug non mi permette di sondare più a fondo. Sto collegando cv210.lib; cxcore210.lib; highgui210.lib; le versioni di debug non funzioneranno:

LDR: LdrpWalkImportDescriptor() failed to probe D:\OpenCV2.1\bin\cv210d.dll for its manifest, ntstatus 0xc0150002

ho intenzione di cercare di ingannare il classificatore con una stampa di Anne Hathaway, ma sono aperto ad altri suggerimenti.

https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/facedetect.cpp

+2

Non ne ho idea, ma +1 per avere un senso dell'umorismo. –

+0

Puoi mostrarci il codice in modo che possiamo vedere la tua chiamata a 'cascade.detectMultiScale()'? O il codice è troppo brutto? :-) – SSteve

+0

Il codice è ora collegato nella domanda! Come puoi vedere, è solo il codice di esempio incluso, quindi forse qualcosa non funziona nel mio sistema o nella mia configurazione di progetto. –

risposta

0

Ho trascorso la giornata cercando di risolvere il problema. Chissà perché si è schiantato? Non sono riuscito a collegarmi alle DLL di debug, quindi non lo sapremo mai. Ho scaricato la distribuzione OpenCV-2.1.0-win32-vs2008.exe. E sto usando Visual Studio 2010. Pertanto, l'exe stava arrestando con

LDR: LdrpWalkImportDescriptor() failed to probe D:\OpenCV2.1\bin\cv210d.dll for its manifest, ntstatus 0xc0150002 Debugger:: An unhandled non-continuable exception was thrown during process load The program '[5172] HeadTrackerExample.exe: Native' has exited with code -1072365566 (0xc0150002).

Questo è l ' "errore 0xc0150002". Secondo Dependency Walker, le DLL di debug di OpenCV stanno cercando di trovare msvcr90d.dll e msvct90d.dll, le DLL di runtime di debug di Visual Studio 2008. Bene, ho ottenuto questi e ancora non ha funzionato, quindi questo entra in Windows Sidebyside esoterico e manifestare cose.

Sono passato alla distribuzione OpenCV-2.3.1-win-superpack.exe e ora funziona.

1

Credo di essere più bello di te perché sta lavorando qui (sotto OS X). Sei sicuro di aver caricato correttamente i file xml? Stai usando i file xml predefiniti (haarcascade_frontalface_alt.xml e haarcascade_eye_tree_eyeglasses.xml)?

Sembra proprio che tu abbia un puntatore nullo. Prova a impostare un punto di interruzione alla chiamata a cascade.detectMultiScale() ed esamina i valori di cascade, smallImg, smallImg.data e faces.

Edit: popolare il faces vettore

Ecco il codice detectMultiScale:

void HaarClassifierCascade::detectMultiScale(const Mat& image, 
         Vector<Rect>& objects, double scaleFactor, 
         int minNeighbors, int flags, 
         Size minSize) 
{ 
    MemStorage storage(cvCreateMemStorage(0)); 
    CvMat _image = image; 
    CvSeq* _objects = cvHaarDetectObjects(&_image, cascade, storage, scaleFactor, 
              minNeighbors, flags, minSize); 
    Seq<Rect>(_objects).copyTo(objects); 
} 

Non è toccare il faces vettore fino a quando l'ultima riga dopo tutto il rilevamento è fatto. Se sei avventuroso, puoi inserire alcune dichiarazioni printf qui per vedere se cvHaarDetectObjects sta completando e se restituisce un puntatore nullo.

+0

sì, il xml si carica bene. Buon consiglio di debug, ci proverò. Tuttavia, la chiamata detectMultiScale viene completata correttamente * finché * non trova una faccia, il che mi fa pensare che ci sia un problema quando tenta di popolare il vettore 'faces' (accessibile per riferimento) –

Problemi correlati