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