2012-01-14 17 views
12

Sto provando a caricare un file xml di formazione con CascadeClassifier::load() e funziona correttamente in modalità di debug, ma in modalità di rilascio viene visualizzato un errore di runtime.Il comando Simple OpenCV funziona in modalità di debug ma non in modalità di rilascio

L'errore che ottengo è:

Eccezione non gestita a 0x000007feefbf4938 in Testing.exe: 0xC0000005: accesso scrittura violazione posizione 0x0000000000000027.

Il mio codice è il seguente:

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

Il codice si blocca sulla linea di carico. Perché dovrebbe succedere?

+1

Questo è il tuo codice? se sì, probabilmente è un bug in OpenCV. in caso contrario, elimina TUTTO il tuo codice attorno a questa linea e prova a localizzare il bug – Sam

+0

L'interfaccia C++ per Windows mi ha dato un sacco di mal di testa già. Prova questo con l'interfaccia C di OpenCV e preparati a festeggiare. Questa domanda merita più upvotes. – karlphillip

+7

Stai collegando le librerie OpenCv di debug per la versione di debug dell'app e Release Opencv per la versione di rilascio della tua app? Potrei essere esausto ma dovresti controllarlo. – Patryk

risposta

8

assicurarsi di collegarsi alle DLL di rilascio di openCV quando si esegue in modalità di rilascio. Ho avuto problemi simili quando ho provato a caricare file con DLL di rilascio e debug miste.

Vedere this post.

+0

Ho fatto lo stesso errore quando aggiungo ** Dipendenze aggiuntive ** nel Linker. cambiando in 'opencv_world330.lib' da' opencv_world330d.lib' l'ho risolto per me. – Sndn

0

Nessuna ipotesi sul motivo per cui la linea load causerebbe una violazione di accesso solo per la versione di rilascio. Quindi, il prossimo passo è quello di strumentare i binari di rilascio di OpenCV con il logging, o printfs, o qualsiasi altra cosa funzioni per voi. Questo tipo di debug funziona in questo scenario poiché hai la sorgente per OpenCV e la possibilità di ricompilare con VS2010.

0

Credo che il tuo errore sia nel "caricamento" del file XML e nella tua "directory di lavoro" nelle impostazioni del tuo progetto.

Se si accede alla finestra Proprietà del progetto, assicurarsi che la "Directory di lavoro" in "Debug" sia corretta. Cambia la 'Configurazione' (tra Debug e Release) e dovresti essere in grado di confrontare.

Talvolta si riceve questo errore quando si tenta di leggere un file che non esiste. Usando percorsi locali che sono nella directory di lavoro 'sbagliata' di solito è il colpevole quando funziona in una configurazione e non in un'altra.

EDIT:

Fa quel file esiste e è corretto XML?

+0

Controllerò quello che mi hai suggerito quando torno a casa, ma sì, esiste ed è corretto. Come ho detto, funziona perfettamente nella modalità Debug, ma non nella modalità di rilascio. – zebra

+0

Sì, ma se si sta avviando il codice da VS anche in modalità di rilascio, verrà comunque visualizzata la suddetta "Directory di lavoro" per vedere dove si suppone di vivere. Se questo non è lo stesso della modalità di debug E stai usando percorsi locali ovunque (che potrebbe essere il caso), potrebbe essere il tuo problema. – g19fanatic

0

Questo è piuttosto strano. Controlla le opzioni per la versione di debug e release, assicurati di utilizzare la versione corretta delle librerie.

ho provato a fare funzionare il codice su un mio progetto, e funziona bene sia in debug e rilasciare la versione, con OpenCV 2.3.1

Prova ad aggiungere queste righe di codice per un altro progetto, con la versione di rilascio di lavoro e dove usi già opencv. Se funziona, il problema è nelle impostazioni di configurazione.

Problemi correlati