2016-02-09 1 views
1

comme le titre, j'ai besoin de sérialiser pour déposer un dictionnaire personnalisé créé à partir de la bibliothèque arUco en utilisant OpenCV 3.x (la version 3 est stricte).OpenCV 3 et ArUco lib - Serialize Dictionary

La deuxième étape consiste à charger à nouveau le dictionnaire à partir du fichier.

Je n'ai pas pu trouver d'exemples en ligne ou j'ai eu un succès partiel.

Toute aide est appréciée!

+2

Le dictionnaire est juste une classe avec trois membres du public: 'Mat bytesList',' int markerSize', 'int maxCorrectionBits'. Ne pouvez-vous pas simplement les sauvegarder et les charger dans un 'FileStorage'? – Miki

Répondre

3

Utilisez ce code pour enregistrer:

int number= 10, dimension=7; 
cv::aruco::Dictionary dictionary = cv::aruco::generateCustomDictionary(number, dimension); 
cv::Mat store=dictionary.bytesList; 
cv::FileStorage fs("dic_save.yml", cv::FileStorage::WRITE); 
fs << "MarkerSize" << dictionary.markerSize; 
fs << "MaxCorrectionBits" << dictionary.maxCorrectionBits; 
fs << "ByteList" << dictionary.bytesList; 
fs.release(); 

Utilisez ce code pour lire:

cv::FileStorage fsr("dic_save.yml", cv::FileStorage::READ); 
int mSize, mCBits; 
cv::Mat bits; 
fsr["MarkerSize"] >> mSize; 
fsr["MaxCorrectionBits"] >> mCBits; 
fsr["ByteList"] >> bits; 
fsr.release(); 
cv::aruco::Dictionary dic = cv::aruco::Dictionary(bits, mSize, mCBits); 
+0

Merci, ça marche !!!! –