Perché OpenCV rifiuta cvLoadImage ("string.ext"), ma accetta cvLoadImage (argv [1])?
-
22-07-2019 - |
Domanda
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
int main(int argc, char* argv[]){
cvNamedWindow("Window1", CV_WINDOW_AUTOSIZE);
IplImage* image = 0;
->->image = cvLoadImage(argv[1]);<-<-
if(!image) printf("Unable to load image!");
cvShowImage("Window1", image);
char c = cvWaitKey(0);
cvReleaseImage(&image);
cvDestroyWindow("Window1");
return 0;
}
Se sostituisco la riga indicata con cvLoadImage (" 247.png ")
ottengo una finestra vuota e l'immagine rimane uguale a zero
Se corro l'exe e gli do 247.png come argomento, è solo dandy. Se inserisco il "247.png" nel codice e compilarlo ed eseguirlo Visual Studio 2008, non riesce. Se compilo ed eseguo dal prompt dei comandi, funziona.
Perché questo? Sono un po 'stanco di andare avanti senza scendere.
Soluzione
In Project- > Properties- > Configuration Properties- > Debugging c'è un campo " Working Directory " ;. Impostalo sulla directory in cui vuoi eseguire e che dovrebbe risolvere il problema.
Altri suggerimenti
Sei sicuro " 247.png " è nella directory di lavoro corrente quando hai il nome hardcoded?
Esegui il programma con qualcosa come Process Monitor per vedere cosa il file viene realmente aperto (o quali errori di I / O potrebbero esserci).
Dopo la modifica per aggiungere ulteriori informazioni alla domanda (il problema si verifica quando eseguito da VS2008) questo è quasi sicuramente il tuo problema. La directory corrente in cui VS avvia il programma non è la directory che ha " 247.png " file.
Puoi controllare per vedere qual è il tuo cwd
?
Puoi #include < direct.h >
e utilizzare la funzione _getcwd
per vedere di cosa si tratta. Questo probabilmente ti indicherà il colpevole.