2011-11-17 39 views
5

puedo construir y ejecutar el código de abajo con éxito:excepción no controlada en OpenCV + VS2010

IplImage* img = cvLoadImage("C:\\hello.jpg"); 
cvNamedWindow("myfirstwindow"); 
cvShowImage("myfirstwindow", img); 

pero me dio la excepción no controlada cuando se ejecuta el código de abajo:

cv::Mat image= cv::imread("boldt.jpg"); 
    cv::namedWindow("Image"); 
    cv::imshow("Image",image); 

aunque, puedo construir el código exitosamente

Estoy usando opencv2.2 con la versión VS2010 x86 en la versión de Windows 7 x86. por favor ayuda!

actualización: Lo probé en winxp, y funciona bien ... y funciona bien con win7 en el modo de lanzamiento solamente.

Respuesta

3

Estoy usando OpenCV 2.3.1 y cuando lo ejecuto en modo Release (vinculado a un release highgui lib), todo está bien. Cuando cambio al modo de depuración (aún vinculado a una versión de highgui lib), se bloquea. La vinculación a una debug highgui lib ayudó.

Tal vez usted tiene el mismo problema ...

+0

Sí, tenemos el mismo problema. Actualizo a OpenCV2.3.1 y sigo bloqueado en el modo de depuración, pero funciona bien en el modo de lanzamiento. – Zombia

+2

Separa la depuración y liberación .libs para su proyecto en VC10 .. fijos mi problema – Mattias

1

Did marcó la salida de la función imread()?

if(image.empty()) 
{ 
     cout << "where's my image?" << endl; 
     return 0; 
} 
+0

gracias por su answer..the error excepciones unhandle se producen con una sola línea: "cv :: imagen Estera = cv :: imread (" 1. jpg ");" .. Creo que la función imread no se puede ejecutar en mi VS2010. – Zombia

5

Podría ser el problema donde la gente no se da cuenta de que cuando VStudio ejecuta la aplicación intenta encontrar sus recursos en el mismo directorio que el ejecutable compilado y no en la carpeta en la fuente los archivos son

¡Su primer código funciona porque está cargando la imagen que pasa la RUTA COMPLETA al archivo!

Es por eso que es tan importante para comprobar el éxito de las funciones cuando se está codificando:

try 
{ 
    cv::Mat image = cv::imread("boldt.jpg"); 

    if (!image.data) 
     printf("!!! No data !!!"); 
} 
catch(std::exception e) 
{ 
    printf("Exception: [%s]\n", e.what()); 
} 

Este tipo de práctica de programación le ahorrará mucho tiempo.

EDITAR:

Bueno, si el accidente sigue ocurriendo esto significa que podría ser cualquiera o cv::namedWindow()cv::imshow() culpa, y my money is on cv::namedWindow().

Otros usuarios reportaron un comportamiento similar en Windows:

OpenCV 2.2 Windows XP MinGW build crashes on namedWindow, imshow

Open CV crashes under WIN7 when opening NamedWindow

namedWindow() causes crash in opencv 2.3.1? (Eclipse+MinGW on XP, C++)

Parece que to solve the problem you need to disable SSE optimizaciones.

+0

gracias por su respuesta ... Pero todavía tengo el mismo problema después de haber cambiado a CAMINO COMPLETO. Y el código de excepción anterior tampoco funcionó y obtuvo el mismo error de excepción no controlada cuando se ejecutó el código. – Zombia

+1

¡Respuesta actualizada! esto es probablemente un [error conocido de OpenCV en Windows] (https://code.ros.org/trac/opencv/ticket/583). – karlphillip

+0

gracias por su respuesta ... la falla aún ocurre después de actualizar a la 2.3.1 y el método SSE no funcionó para mí ... De todos modos, funciona bien en el modo de lanzamiento, parece una buena solución alternativa. :) – Zombia

1

Tengo exactamente el mismo problema que se ha descrito.

¡Resulta que el problema radica en la configuración del enlazador!

he encontrado la respuesta en otro hilo: OpenCV 2.3 and Visual Studio 2010

Aquí está:

"Propiedades de su proyecto (clic derecho sobre él)

  • C/C++
    • General
      • incluyen directorio de añadir el < su directorio> \ OpenCV2.3 \ include \ opencv2, < su directorio> \ OpenCV2.3 \ include \ OpenCV y < su directorio> \ OpenCV2.3 \ incluyen
  • Enlazador

    • general
      • elemento de la lista
    • entrada
      • Agrega todas las librerias como opencv_highgui230d.lib opencv_core230d.lib y así sucesivamente ..."

Una vez que he hecho lo anterior, se puede ejecutar imshow y imread + todos los demás CPP funciona a la perfección! El autor que hizo la pregunta probablemente ya lo haya resuelto. ¡pero por si acaso hay otras personas que son guiadas aquí buscando la misma solución!

¡salud!

0

Compruebe en las carpetas que genera la compilación, ya que en uno de ellos es el. exe compilado, y es posible que la imagen que desea abrir no esté allí. En mi caso el.exe (en el modo Debuge) estaba en C: \ Users \ Name \ source \ repos \ HolaMundox \ x64 \ Debug, y no creé mi .cpp que estaba en C: \ Users \ Name \ source \ repos \ HolaMundox. Algo similar se aplicará con el modo de lanzamiento. Otra cosa es que debes verificar bien la extensión de la imagen, si es .jpg, .jpeg, .bmp, y así sucesivamente ... un error que tuve fue que puse la extención .jpg y así fue. jpeg.

Cuestiones relacionadas