2013-02-27 4 views
0

Je charge un fichier yml qui a des points "160470 * 199". Cela prend plus d'une minute dans ma machine. Comment puis-je le faire rapidement?chargement d'un fichier YML dans Opencv - Optimisation

J'ai utilisé le code ci-dessous pour charger un fichier yml.

Mat sd; 
string Fsd = "//home//Desktop//YML//sd.yml"; 
FileStorage fsDemo1(Fsd, FileStorage::READ); 
fsDemo1["sd"] >> sd; 
+0

[Ceci] (http://stackoverflow.com/questions/293672/reading-files-larger-than-4gb-using-c-stl) peut aider. –

+0

@Krishna Je le lis en utilisant FileStorage d'opencv. Pouvez-vous s'il vous plaît me donner un exemple? \ – 2vision2

Répondre

0

Vous pouvez supposer que le fichier lu dans la classe FileStorage de OpenCV est suffisamment bien réglée pour la performance.

Ce qui devrait vous inquiéter le plus, c'est que vous avez vraiment besoin des finesses de FileStorage. L'inconvénient de l'utilisation de cette méthode est qu'une grammaire complète YAML/XML parser sera exécuté sur votre gros fichier. Ce sera à mon avis beaucoup plus lent que le temps nécessaire pour lire le fichier sur le disque. Mon conseil est que si vous êtes vraiment à la recherche de lectures rapides à partir de disques et d'une utilisation immédiate (pas d'analyse requise), je vous conseille de stocker vos données dans des fichiers binaires. L'avantage d'utiliser de tels fichiers est que le seul moment passé à lire les fichiers, vous n'avez pas à les analyser. Vous pouvez lire immédiatement un C struct ou un C++ class. Cependant, l'inconvénient est que si vous écrivez vos données dans un fichier binaire, vous risquez de rencontrer des erreurs vraiment irritantes lorsque vous migrez vers une autre machine (architecture différente), en particulier avec l'endianness, ou peut-être même une longueur variable de int type. Mais à mon avis, ce sera rare, car la plupart des gens utilisent des processeurs compatibles Intel ou Intel de toute façon.

+0

Je conseillerais au moins d'être prudent lors du dumping des classes en tant que données binaires directement dans le fichier. L'OMI écrit une routine/méthode pour (dé) sérialiser un binaire est beaucoup plus robuste et mérite d'y mettre un peu d'effort. Imaginez que vous ajoutiez une propriété à votre classe, quelques paramètres statistiques concernant les données, n'importe quoi. La vidage binaire entier devient incompatibile, alors que les données binaires associées à la classe ne changeraient pas souvent. Les vidages binaires droits (mémoire) IMO doivent être évités pour le stockage non volatile. – luk32

+0

J'ai supposé que 2vision2 avait une API cohérente qui ne changerait pas au fil du temps. – subzero

0

Exécutez le programme en mode Release. Cela augmentera la vitesse du programme 5 fois.

Questions connexes