Opencv 没有可用于cv::flann::Index::knnSearch()的源

Opencv 没有可用于cv::flann::Index::knnSearch()的源,opencv,sift,surf,descriptor,flann,Opencv,Sift,Surf,Descriptor,Flann,我正在尝试在OpenCV中实现Flann索引。让我一步一步地介绍一下我的实施情况: 1) 我从图像中提取了冲浪特征,并连接了所有这些特征。然后保存描述符和法兰索引,如下所示: FileStorage fs("descriptors.yml", FileStorage::WRITE); write(fs, "descriptors", descriptors); flann_index_saved.save("tmp_twitter.fln"); FileStorage fsRead(yamlF

我正在尝试在OpenCV中实现Flann索引。让我一步一步地介绍一下我的实施情况:

1) 我从图像中提取了冲浪特征,并连接了所有这些特征。然后保存描述符和法兰索引,如下所示:

FileStorage fs("descriptors.yml", FileStorage::WRITE);
write(fs, "descriptors", descriptors);
flann_index_saved.save("tmp_twitter.fln");
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);
 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);
 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);
2) 我从查询图像中提取了冲浪特征

3) 我加载了法兰索引,如下所示:

FileStorage fs("descriptors.yml", FileStorage::WRITE);
write(fs, "descriptors", descriptors);
flann_index_saved.save("tmp_twitter.fln");
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);
 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);
 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) 为了匹配,我使用了knnSearch:

Mat queryDesc, indicesResult, distsResults;
fIndex.knnSearch(queryDesc, indicesResult, distsResults, 1);
 Mat queryDesc, indicesResult, distsResults;
 flannIndexSaved.knnSearch(queryDesc, indicesResult, distsResults, 1);
但什么也没发生。仅出现“无源可用于…”异常。我想我无法在OpenCV中实现Flann

我使用的是Ubuntu 12.04、OpenCV 2.4.10、EclipseCDT+


请帮帮我…

我解决了这个问题。让我回答我自己的问题:)

1) 我从火车图像中提取了冲浪特征,并连接了所有这些特征。然后保存描述符和法兰索引,如下所示:

FileStorage fs("descriptors.yml", FileStorage::WRITE);
write(fs, "descriptors", descriptors);
flann_index_saved.save("tmp_twitter.fln");
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);
 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);
 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);
2) 我从查询图像中提取了冲浪特征

3) 我加载了法兰索引,如下所示:

FileStorage fs("descriptors.yml", FileStorage::WRITE);
write(fs, "descriptors", descriptors);
flann_index_saved.save("tmp_twitter.fln");
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);
 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);
 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) 为了匹配,我使用了knnSearch:

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

这很好:)

我解决了这个问题。让我回答我自己的问题:)

1) 我从火车图像中提取了冲浪特征,并连接了所有这些特征。然后保存描述符和法兰索引,如下所示:

FileStorage fs("descriptors.yml", FileStorage::WRITE);
write(fs, "descriptors", descriptors);
flann_index_saved.save("tmp_twitter.fln");
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);
 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);
 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);
2) 我从查询图像中提取了冲浪特征

3) 我加载了法兰索引,如下所示:

FileStorage fs("descriptors.yml", FileStorage::WRITE);
write(fs, "descriptors", descriptors);
flann_index_saved.save("tmp_twitter.fln");
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);
 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);
 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) 为了匹配,我使用了knnSearch:

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

这很好:)

我相信这个错误是Eclipse告诉您它找不到用于调试的源文件(例如,如果您正在单步执行程序)。这是因为您只有OpenCV库,而没有源代码(或者至少在Eclipse中没有对它的引用)。它与您编写的实际代码无关。问题可能与您如何使用索引有关——是否还有其他错误消息?什么时候它会失败?谢谢你的回复。但是正如我前面提到的,当我运行代码时,什么都没有发生。您对此有什么想法吗?我相信这个错误是Eclipse告诉您它找不到用于调试的源文件(例如,如果您正在单步执行程序)。这是因为您只有OpenCV库,而没有源代码(或者至少在Eclipse中没有对它的引用)。它与您编写的实际代码无关。问题可能与您如何使用索引有关——是否还有其他错误消息?什么时候它会失败?谢谢你的回复。但是正如我前面提到的,当我运行代码时,什么都没有发生。你知道这件事吗?