2017-04-08 4 views
0

Il est de notoriété publique qu'en raison d'un bogue dans OpenCV lorsque vous essayez de charger un SVM de noyau non linéaire après l'avoir enregistré, vous obtenez une erreur.Sérialisation d'objets en C++ pour stocker l'objet SVM d'OpenCV [OpenCV 3.1.0]

Référez ici pour plus: OpenCV 3.1.0: Save and load trained SVMs

Les gens ont obtenu le SVM à charger, mais ont été incapables d'obtenir le même résultat (données classificateur a été endommagé après le chargement). J'ai essayé de le tester en écrivant ma propre fonction svmloader.

Ptr<SVM> svmloader(const String& filepath) 
{ 
    FileStorage fs; 
    fs.open(filepath, FileStorage::READ); 

    Ptr<SVM> svm = Algorithm::read<SVM>(fs.getFirstTopLevelNode()); 
    return svm; 
} 

Cela fonctionne, mais je ne peux que confirmer de maintenant que je l'ai testé avant et le chargement après modèle et les résultats semblent pire après le chargement. C'est après avoir formé un classificateur et que vous l'avez testé, tout ira bien, mais si vous le sauvegardez et le chargez à nouveau, il sera amélioré. Donc je pense que je veux utiliser la sérialisation d'objets de C++ pour résoudre ce problème. Comment puis-je écrire des objets arbitraires dans un fichier puis lire dans ce fichier?

Aussi quelqu'un peut-il confirmer si le bug ci-dessus a été corrigé dans OpenCV 3.2.0 Je ne pouvais pas trouver quelque chose dans le releasenotes

Toute aide est très apprécié des gens

Répondre