2012-01-14 12 views
12

Estoy tratando de cargar un archivo xml de entrenamiento con CascadeClassifier::load(), y funciona bien en modo Debug, pero en el modo Release recibo un error de tiempo de ejecución.El comando Simple OpenCV funciona en modo Debug pero no en modo Release

El error que consigo es:

excepción no controlada en 0x000007feefbf4938 en Testing.exe: 0xc0000005: acceso de localización de escritura violación 0x0000000000000027.

Mi código es el siguiente:

CascadeClassifier c; 
if (!c.load("C:/data/haarcascade_frontalface_alt.xml")) 
{ 
    exit(1); 
} 

El código se bloquea en la línea de carga. ¿Por qué sucedería esto?

+1

¿Es este su código? si es así, probablemente sea un error en OpenCV. si no, elimine TODO su código alrededor de esta línea e intente localizar el error – Sam

+0

La interfaz C++ para Windows me dio muchos dolores de cabeza ya. Pruebe esto con la interfaz C de OpenCV y prepárese para celebrar. Esta pregunta merece más votos favorables. – karlphillip

+7

¿Está vinculando bibliotecas de depuración de OpenCv para la versión de depuración de su aplicación y libera Opencv para la versión de lanzamiento de su aplicación? Puede que me preocupe, pero deberías comprobarlo. – Patryk

Respuesta

8

asegúrese de estar enlazando con los archivos dll de lanzamiento de openCV cuando se ejecuta en modo de lanzamiento. He tenido problemas similares cuando intenté cargar archivos con versiones mixtas y depuración dlls.

Ver this publicar.

+0

Cometí el mismo error al agregar ** Dependencias Adicionales ** en el Enlazador. cambiando a 'opencv_world330.lib' de' opencv_world330d.lib' me lo arregló. – Sndn

0

No adivina por qué su línea load causaría una infracción de acceso solo para la compilación de versiones. Entonces, el próximo paso es instrumentar sus binarios de lanzamiento de OpenCV con logging, o printfs, o lo que sea que funcione para usted. Este tipo de depuración funciona en este escenario ya que tiene la fuente para OpenCV y la capacidad de recompilar con VS2010.

0

Creo que su error está en la "carga" del archivo XML y su configuración de "directorio de trabajo" en la configuración de su proyecto.

Si va a la ventana Propiedades de su proyecto, asegúrese de que el 'Directorio de trabajo' en Opciones de "Depuración" sea correcto. Cambia la 'Configuración' (entre Depuración y Versión) y deberías poder comparar.

A veces recibirá este error cuando intente leer un archivo que no existe. Usar rutas locales que estar en el directorio de trabajo 'incorrecto' suele ser el culpable cuando funciona en una configuración y no en otra.

EDIT:

¿Existe ese archivo y es XML adecuado?

+0

Comprobaré lo que sugirió cuando llegue a casa, pero sí existe y es correcto. Como dije, esto funciona perfectamente bien en el modo de depuración, pero no en el modo de lanzamiento. – zebra

+0

Sí, pero si está iniciando el código de VS incluso en modo de lanzamiento, todavía buscará el "Directorio de trabajo" mencionado anteriormente para ver dónde se supone que debe vivir. Si esto no es lo mismo que el modo de depuración Y está utilizando rutas locales en cualquier lugar (que podría ser el caso), podría ser su problema. – g19fanatic

0

Esto es bastante extraño. Compruebe sus opciones para la versión de depuración y versión, asegúrese de estar utilizando la versión correcta de las bibliotecas.

Me trataron de ejecutar el código en un proyecto mío, y funciona bien tanto en depurar y liberar la versión, con OpenCV 2.3.1

Trate de añadir estas líneas de código a otro proyecto, con el lanzamiento de la versión de trabajo y donde ya usas opencv. Si funciona, entonces el problema está en la configuración de configuración.

Cuestiones relacionadas