2013-03-25 33 views
1

我需要做BOW(單詞袋),但我只有圖像的描述關鍵點。 目前,我已獲得使用的詞彙:使用預先計算的功能在OpenCV中BoW

cv::BOWKMeansTrainer bowtrainerCN(numCenters); //num clusters 
bowtrainerCN.add(allDescriptors); 
cv::Mat vocabularyCN = bowtrainerCN.cluster(); 

所以現在我需要做的任務,而是因爲它計算出的圖像的描述,我已經有一個我不能使用的計算功能。是否有任何功能來完成這個任務,或者讓我手動計算它?

回答

1

一旦使用cv::BOWKMeansTrainer::cluster()方法構建了詞彙表(代碼簿),然後可以將描述符(具有合適的大小和類型)與代碼簿進行匹配。您首先必須選擇使用規範的匹配器類型。 (見opencv doc

例如,cv::BFMatcherL2 norm

// init the matcher with you pre-trained codebook 
cv::Ptr<cv::DescriptorMatcher > matcher = new cv::BFMatcher(cv::NORM_L2); 
matcher->add(std::vector<cv::Mat>(1, vocabulary)); 
// matches 
std::vector<cv::DMatch> matches; 
matcher->match(new_descriptors,matches); 

然後最接近的碼字中的碼本的new_descriptors指數[I]將

matches[i].trainIdx; 
+0

太好了!你救了我的命 – Ata 2016-09-30 15:15:33