這裏的未經測試示例代碼
using namespace std;
using namespace cv;
Mat query; //the query image
vector<Mat> images; //set of images in your db
/* ... get the images from somewhere ... */
vector<vector<KeyPoint> > dbKeypoints;
vector<Mat> dbDescriptors;
vector<KeyPoint> queryKeypoints;
Mat queryDescriptors;
/* ... Extract the descriptors ... */
FlannBasedMatcher flannmatcher;
//train with descriptors from your db
flannmatcher.add(dbDescriptors);
flannmatcher.train();
vector<DMatch > matches;
flannmatcher.match(queryDescriptors, matches);
/* for kk=0 to matches.size()
the best match for queryKeypoints[matches[kk].queryIdx].pt
is dbKeypoints[matches[kk].imgIdx][matches[kk].trainIdx].pt
*/
找到最「類似」的圖像與查詢圖像取決於你的應用。也許匹配關鍵點的數量是足夠的。或者您可能需要更復雜的相似度量度。
感謝您的回覆,「queryKeypoints [matches [kk] .queryIdx] .pt 的最佳匹配是dbKeypoints [matches [kk] .imgIdx] [matches [kk] .trainIdx] .pt」如何做到這一點部分,如何確定最佳匹配,要實現的算法或opencv中的方法。 – AquaAsh 2011-04-18 07:28:28
函數調用flannmatcher.match(queryDescriptors,matches);做匹配。你所要做的就是使用向量匹配中的索引。 – Sammy 2011-04-18 12:21:18
對不起,遲到的答覆,謝謝,我終於明白了索引的事情。無論如何,我試圖減少誤報,你能否提出任何複雜的相似度量。 – AquaAsh 2011-04-25 13:32:54