OpenCV cvLoadImage() ne prend pas en charge les images dans le débogueur de visual studio?
Je suis en train de travailler sur un simple hello world pour OpenCV, mais je suis à cours d'idées pour lesquelles il n'est pas de travail.
Quand j'ai compiler et exécuter ce code:
#include <cv.h>
#include <highgui.h>
int main(int argc, char* argv[])
{
IplImage* img = cvLoadImage( "myjpeg.jpg" );
cvNamedWindow( "MyJPG", CV_WINDOW_AUTOSIZE );
cvShowImage("MyJPG", img);
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow( "MyJPG" );
return 0;
}
Je reçois une boîte grise 200x200 au lieu de l'indication .fichier jpg. Si j'utilise un autre format jpg-je obtenir le même type de fenêtre, et si je mets un nom de fichier non valide, j'obtiens une très petite fenêtre (prévu).
Je suis à l'aide de Visual Studio 2008 sous Windows 7 Professionnel.
La plupart des exemples de programmes semblent bien fonctionner, donc je suis doublement confus comment ce code des charges de l'échantillon jpg très bien, mais dans le code ci-dessus ne fonctionne pas (même essayé de l'échantillon jpeg).
Mise à jour
Les exécutables produits par la compilation de bien fonctionner, cependant, le débogueur Visual Studio 2008 charges d'un pointeur null dans img chaque fois que j'essaie d'exécuter le débogueur - peu importe si l'emplacement du fichier est implicite ou explicite.
- Sur quelle plate-forme ne vous compilez le programme? Pouvez-vous vérifier si l'image est en fait chargé if(img == NULL) { std::cout << "Trouble" << std::endl; }
- De plus les tests montrent que l'exécutable fonctionne très bien en dehors de l'environnement de visual studio fourni la OpenCV .les fichiers dll sont présents dans le même répertoire, mais en effet, img est un pointeur null après cvLoadImage() est appelée lors de l'exécution dans l'environnement de débogage.
- Le problème est peut-être que votre programme n'est pas exécuté dans le même répertoire que le fichier de l'image réside dans. (c'est un problème que vous utilisez un chemin relatif)
- Cela semble être un problème lié le débogueur. J'ai remplacé le chemin d'accès relatif explicite et encore l'img variable revient un pointeur null après cvLoadImage(), mais l'exécutable s'exécute correctement (l'image est affichée) lorsque fonctionner de manière autonome (avec les fichiers locaux).
- La version d'OpenCV utilisez-vous?
- OpenCV2.0 est la version utilisée.
Vous devez vous connecter pour publier un commentaire.
Il semble vraiment comme il y a un problème avec le chemin d'accès à
myjpeg.jpg
depuis le répertoire courant peut être différent lorsque vous êtes en cours d'exécution sous le débogueur.Par défaut, le répertoire courant que le débogueur Visual Studio utilise est le répertoire contenant les
.vcproj
fichier, mais vous pouvez le modifier dans les propriétés du projet (Débogage -> Répertoire de Travail).Êtes-vous sûr à 100% que vous passez sur le chemin absolu correctement? Essayez de passer par le même chemin à
fopen
et voir si elle renvoie égalementNULL
. Si oui, alors le chemin d'accès est incorrect.Si vous voulez voir exactement ce fichier est la bibliothèque en essayant de l'ouvrir, vous pouvez utiliser Project Monitor avec un filtre sur
myjpeg.jpg
.La version d'OpenCV utilisez-vous? J'ai essayé votre code sur la dernière (OpenCV2.0) et il fonctionne très bien. Vous pouvez télécharger OpenCV2.0 de ici.
Si vous voulez la dernière version, vous pouvez obtenir le vérifier avec la commande SVN de ici.
Mat
classe et laimread
fonction de la nouvelle interface C++ est beaucoup mieux 🙂Essayez d'ajouter
HAVE_JPEG
dans les définitions de préprocesseur.J'ai rencontré le même problème. La version de Débogage ne charge pas l'image, mais quand je l'ai compiler et lier comme une Libération, il fonctionne. J'espère que cette aide