2011-11-17 12 views
5

posso costruire ed eseguire il codice qui sotto con successo:eccezione non gestita in OpenCV + VS2010

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

ma ho avuto l'eccezione non gestita quando viene eseguito il codice qui sotto:

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

anche se, posso costruire il codice con successo.

Sto usando opencv2.2 con la versione x86 di VS2010 su Windows 7 versione x86. per favore aiuto!

aggiornamento: l'ho provato su winxp, e funziona bene ... e funziona bene con win7 solo in modalità di rilascio.

risposta

3

Sto usando OpenCV 2.3.1 e quando lo eseguo in modalità di rilascio (collegato a una versione di lib di highgui), tutto va bene. Quando passo alla modalità Debug (ancora collegato a una versione di lib di highgui), si blocca. Il collegamento a una lib di highgui di debug ha aiutato.

Forse avete lo stesso problema ...

+0

Sì, abbiamo avuto lo stesso problema. Aggiornamento a OpenCV2.3.1 e ancora arresto anomalo in modalità Debug, ma funziona correttamente in modalità di rilascio. – Zombia

+2

Separare il debug e rilasciare .libs per il tuo progetto in vc10 .. risolto il mio problema – Mattias

1

Forse è stata selezionata l'uscita della funzione imread()?

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

grazie per la tua risposta ... l'errore di eccezione non gestibile si verifica con una sola riga: "cv :: Mat image = cv :: imread (" 1. jpg ");" .. Penso che la funzione imread non possa essere eseguita nel mio VS2010. – Zombia

5

Potrebbe essere il problema in cui le persone non si rendono conto che quando VStudio esegue l'applicazione cerca di trovare la sua risorse nella stessa directory come l'eseguibile compilato e non nella cartella in cui la fonte i file sono.

Il tuo primo codice funziona perché stai caricando l'immagine passando il PERCORSO COMPLETO al file!

Ecco perché è così importante per verificare il successo di funzioni quando si esegue la codifica:

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

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

Questo tipo di pratica di programmazione vi farà risparmiare un sacco di tempo.

EDIT:

Beh, se l'incidente è ancora accadendo vuol dire che potrebbe essere o cv::namedWindow() o colpa cv::imshow() e my money is on cv::namedWindow().

Altri utenti hanno segnalato un comportamento simile su 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++)

Sembra che to solve the problem you need to disable SSE ottimizzazioni.

+0

grazie per la tua risposta..Ma ho ancora lo stesso problema dopo aver cambiato in PIENO PERCORSO. E il codice di eccezione sopra non ha funzionato e ha ottenuto lo stesso errore di eccezione non gestita quando eseguito il codice. – Zombia

+1

Risposta aggiornata! questo è probabilmente un [noto bug di OpenCV su Windows] (https://code.ros.org/trac/opencv/ticket/583). – karlphillip

+0

grazie per la tua risposta..il crash si verifica ancora dopo l'aggiornamento alla 2.3.1 e il metodo SSE non ha funzionato per me..In ogni caso, funziona bene in modalità Release, sembra una buona soluzione alternativa. :) – Zombia

1

Ho esattamente lo stesso problema descritto.

Si scopre che il problema si trova molto nelle impostazioni del linker!

ho trovato la risposta in un altro thread: OpenCV 2.3 and Visual Studio 2010

Eccolo:

"Proprietà del progetto (tasto destro del mouse su di esso)

  • C/C++
    • Generale
      • includono directory aggiungere il < vostra directory> \ OpenCV2.3 \ include \ opencv2, < la directory> \ OpenCV2.3 \ include \ OpenCV e < la directory> \ OpenCV2.3 \ include
  • Linker

    • generale
      • voce dell'Elenco
    • ingresso
      • aggiungere tutte le librerie come opencv_core230d.lib opencv_highgui230d.lib e così via ..."

Una volta che ho fatto quanto sopra, posso correre imshow e imread + tutti gli altri cpp funziona perfettamente! L'autore che ha posto la domanda probabilmente l'ha già risolto. ma nel caso ci siano altre persone che vengono guidate qui alla ricerca della stessa soluzione!

evviva!

0

controllare nelle cartelle che genera la compilazione, perché in uno di loro è il. exe compilato, ed è possibile che l'immagine che si desidera aprire non sia lì. Nel mio caso il.exe (in modalità Debuge) era in C: \ Users \ Name \ source \ repos \ HolaMundox \ x64 \ Debug, e non ero in grado di creare il mio file .cpp su C: \ Users \ Name \ source \ repos \ HolaMundox. Qualcosa di simile si applicherà con la modalità Release. Un'altra cosa è che devi controllare bene l'estensione dell'immagine, se è .jpg, .jpeg, .bmp, e così via ... un errore che ho avuto è stato che ho inserito l'estensione .jpg ed era. jpeg.

Problemi correlati