2011-09-29 17 views
6

Estoy tratando de compilar el facedetect.cpp en la carpeta OpenCV \ Samples \ C, en Visual Studio 2010. El proyecto se compila y comienza muy bien, muestra una vista previa de mi cámara , y luego parece bloquearse en cascade.detectMultiScale() tan pronto como detecta una cara. Llegué a la conclusión de que OpenCV piensa que soy demasiado feo.OpenCV 2.1: facedetect.cpp se cuelga cuando encuentra la cara fea

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

Por desgracia, la información de depuración no me permite profundizar más. Estoy vinculando contra cv210.lib; cxcore210.lib; highgui210.lib; las versiones de depuración no funcionará:

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

voy a tratar de engañar al clasificador con una copia impresa de Anne Hathaway, pero estoy abierto a otras sugerencias.

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

+2

No tengo ni idea, pero +1 por tener sentido del humor. –

+0

¿Puede mostrarnos el código para que podamos ver su llamada a 'cascade.detectMultiScale()'? ¿O es el código demasiado feo también? :-) – SSteve

+0

¡El código ahora está vinculado en la pregunta! Como puede ver, es solo el código de muestra incluido, por lo que tal vez algo esté mal en mi sistema o en la configuración de mi proyecto. –

Respuesta

0

Pasé el día tratando de arreglar esto. ¿Quién sabe por qué se estaba estrellando? No pude vincular a los archivos DLL de depuración, así que nunca lo sabremos. Descargué la distribución OpenCV-2.1.0-win32-vs2008.exe. Y estoy usando Visual Studio 2010. Por lo tanto, el exe se estrellaba 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).

Ésta es la "0xc0150002 error". De acuerdo con Dependency Walker, las DLL de depuración de OpenCV están tratando de encontrar msvcr90d.dll y msvct90d.dll, las DLL de tiempo de ejecución de depuración de Visual Studio 2008. Bueno, obtuve estos y todavía no funcionó, entonces esto se mete en el lado esotérico de Windows y manifiesta cosas.

Cambié a la distribución OpenCV-2.3.1-win-superpack.exe y ahora está funcionando.

1

Creo que estoy más guapo que usted, ya que está trabajando aquí (en OS X). ¿Estás seguro de que estás cargando correctamente los archivos xml? ¿Estás utilizando los archivos xml predeterminados (haarcascade_frontalface_alt.xml y haarcascade_eye_tree_eyeglasses.xml)?

Parece que tiene un puntero nulo. Intente establecer un punto de interrupción en la llamada al cascade.detectMultiScale() y examine los valores de cascade, smallImg, smallImg.data y faces.

Editar: poblar el vector de faces

Aquí está el código 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); 
} 

No es tocar el vector faces hasta la última línea después de que se hace todo el de detección. Si es aventurero, puede arrojar algunas declaraciones printf aquí para ver si cvHaarDetectObjects está completando y si está devolviendo un puntero nulo.

+0

sí, el xml carga bien. Buena sugerencia de depuración, lo intentaré. Sin embargo, la llamada a detectMultiScale se completa con éxito * hasta que * encuentre una cara, lo que me hace pensar que hay un problema cuando intenta llenar el vector 'faces' (al que se accede por referencia) –

Cuestiones relacionadas