2016-02-27 6 views
1

J'essaie d'implémenter l'index Flann dans OpenCV. Permettez-moi de vous parler de ma mise en œuvre étape par étape:Aucune source disponible pour cv :: flann :: Index :: knnSearch()

1) J'ai extrait les fonctions SURF des images et les ai toutes concaténées. Puis les descripteurs sauvegardés et l'index flann comme ceci:

FileStorage fs("descriptors.yml", FileStorage::WRITE); 
write(fs, "descriptors", descriptors); 
flann_index_saved.save("tmp_twitter.fln"); 

2) J'ai extrait les fonctions SURF de l'image de la requête.

3) Je chargé Flann index comme ceci:

FileStorage fsRead(yamlFile, FileStorage::READ); 
Mat indexMat(Size(64, sampleSize), CV_32FC1); 
fsRead["descriptors"] >> indexMat; 
Index flann_index_loaded; 
flann_index_loaded.load(indexMat, indexFilePath); 

4) Pour une correspondance, je knnSearch:

Mat queryDesc, indicesResult, distsResults; 
fIndex.knnSearch(queryDesc, indicesResult, distsResults, 1); 

Mais rien ne se passe. Seule l'exception "aucune source disponible pour ..." se produit. Je pense que je ne pouvais pas implémenter Flann dans OpenCV. J'utilise Ubuntu 12.04, OpenCV 2.4.10, Eclipse CDT +.

S'il vous plaît aidez-moi ...

+1

Je crois que cette erreur est Eclipse vous indiquant qu'il ne peut pas trouver le fichier source pour le débogage (par exemple si vous parcourez le programme). C'est parce que vous avez juste la bibliothèque OpenCV, pas le code source (ou du moins aucune référence dans Eclipse). Cela n'a rien à voir avec le code que vous avez écrit. Le problème est probablement lié à la façon dont vous utilisez l'index. Y a-t-il d'autres messages d'erreur? À quel moment cela échoue-t-il réellement? – Karnivaurus

+0

Merci pour votre réponse. Mais comme je l'ai mentionné précédemment, quand je cours le code, rien ne se passe. Avez-vous des idées à ce sujet? –

Répondre

0

J'ai résolu le problème. Permettez-moi de répondre à ma propre question :)

1) J'ai extrait les fonctions SURF des images de train et les ai toutes concaténées. Puis les descripteurs sauvegardés et l'index flann comme ceci:

Index flannIndex; 
Mat indexDescriptors; 
IndexParams indexParams; 
indexParams = *new KMeansIndexParams(); 
flannIndex = *new Index(indexDescriptors, indexParams); 
FileStorage fs(descriptorName, FileStorage::WRITE); 
write(fs, "descriptors", indexDescriptors); 
flannIndex.save(indexName); 

2) J'ai extrait les fonctions SURF de l'image de la requête.

3) Je chargé Flann index comme ceci:

Index flannIndexSaved; 
IndexParams indexParamsSaved; 
Mat indexMat; 
indexMat = Mat(Size(64, sampleSize), CV_32F); 
FileStorage fs(yamlFile, FileStorage::READ); 
fs["descriptors"] >> indexMat; 
indexParamsSaved = *new SavedIndexParams(indexFilePath); 
flannIndexSaved = *new Index(indexMat, indexParamsSaved); 

4) Pour une correspondance, je knnSearch:

Mat queryDesc, indicesResult, distsResults; 
flannIndexSaved.knnSearch(queryDesc, indicesResult, distsResults, 1); 

Cela fonctionne bien :)