2012-08-10 3 views
2

J'écris un programme qui utilise OpenCV et implique des paramètres intrinsèques et de distorsion. Ces paramètres sont chargés à partir des fichiers .xml enregistrés sur le disque. J'utilise les commandes suivantes dans mes déclarations d'ouverture pour charger les fichiers:Comment me protéger contre l'échec de cvLoad?

CvMat *intrinsic = (CvMat*)cvLoad("Intrinsics.xml"); 
CvMat *distortion = (CvMat*)cvLoad("Distortion.xml"); 

Cela fonctionne très bien tant que les fichiers se trouvent dans le répertoire de travail du programme. Quand ils ne le sont pas, le programme se bloque sans indication de la nature de l'erreur. J'ai fait l'erreur de ne pas avoir les fichiers xml correctement placés plusieurs fois auparavant, et je voudrais que cela soit plus facile à résoudre à l'avenir.

Je voudrais créer une garde contre le chargement des fichiers. Peut-être que s'ils ne sont pas présents mon programme pourrait afficher un message d'erreur et quitter gracieusement. J'ai vu la méthode suggérée here, et cela devrait fonctionner pour moi, mais je me demandais s'il y avait une façon plus propre de le faire sans inclure un autre en-tête. Par exemple, la fonction OpenCV cvQueryFrame renvoie 0 si elle ne renvoie pas de trame. J'utilise le code

frame = cvQueryFrame(capture); 
if(!frame) 
{ 
    printf("ERROR: Could not get frame from webcam."); 
    exit(-1); 
} 

pour quitter le programme si cvQueryFrame ne parvient pas à retourner une trame. Je voudrais faire quelque chose de similaire avec mes commandes de chargement de la matrice. Est-ce possible, et si oui, comment dois-je le faire?

J'ai vérifié la documentation d'OpenCV et je n'ai pas trouvé de description du comportement de cvLoad quand il ne trouve pas le fichier spécifié, donc je ne sais pas comment procéder.

Je vous écris ce projet en C++ et en cours d'exécution sur Windows 7.

Répondre

0

It works. Allez-y et essayez vous-même:

CvMat *distortion = (CvMat*)cvLoad("Distortion.xml"); 
if (!distortion) 
{ 
    printf("!!! cvLoad failed"); 
    exit(-1); 
} 
+0

Oui, a parfaitement fonctionné. Merci! – user1505243

Questions connexes