其他分享
首页 > 其他分享> > c-使用预先计算的功能在OpenCV中进行BoW

c-使用预先计算的功能在OpenCV中进行BoW

作者:互联网

我需要做BOW(单词袋),但是我只描述了图像的关键点.
目前,我已经使用以下方法获得了词汇表:

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

所以现在我需要进行分配,但是我不能使用计算功能,因为它可以计算图像的描述符,而我已经拥有了.是否有任何功能可以进行分配,或者我可以手动计算?

解决方法:

使用cv :: BOWKMeansTrainer :: cluster()方法构建词汇表(代码书)后,即可将描述符(具有合适的大小和类型)与代码书进行匹配.您首先必须选择需要使用的匹配器类型并使用一个规范. (请参阅opencv doc)

例如,使用cv :: BFMatcher和L2规范

// 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; 

标签:c,opencv,machine-learning,feature-detection
来源: https://codeday.me/bug/20191013/1909449.html