C++ OpenCV描述符配置器半径匹配和knnMatch结果格式
有人知道为什么OpenCV 2C++ OpenCV描述符配置器半径匹配和knnMatch结果格式,c++,opencv,computer-vision,C++,Opencv,Computer Vision,有人知道为什么OpenCV 2DescriptorMatcher::radiusMatch()和knnMatch()采用向量和匹配吗?我有点困惑为什么它不只是一个向量,因为它只是场景中与训练图像相对应的一个点数组,对吗 我有这样的想法: void getMatchingPoints( const vector<vector<cv::DMatch> >& matches, const vector<cv::KeyPoint>& k
DescriptorMatcher::radiusMatch()
和knnMatch()
采用向量和匹配吗?我有点困惑为什么它不只是一个向量,因为它只是场景中与训练图像相对应的一个点数组,对吗
我有这样的想法:
void getMatchingPoints(
const vector<vector<cv::DMatch> >& matches,
const vector<cv::KeyPoint>& keyPtsTemplates,
const vector<cv::KeyPoint>& keyPtsScene,
vector<Vec2f>& ptsTemplate,
vector<Vec2f>& ptsScene
)
{
ptsTemplate.clear();
ptsScene.clear();
for (size_t k = 0; k < matches.size(); k++)
{
for (size_t i = 0; i < matches[k].size(); i++)
{
const cv::DMatch& match = matches[k][i];
ptsScene.push_back(fromOcv(keyPtsScene[match.queryIdx].pt));
ptsTemplate.push_back(fromOcv(keyPtsTemplates[match.trainIdx].pt));
}
}
}
void getMatchingPoints(
常量向量和匹配,
常量向量和密钥模板,
常量向量和keyptscene,
向量和ptsTemplate,
向量&ptsScene
)
{
ptsTemplate.clear();
ptsScene.clear();
对于(size_t k=0;k
但我有点困惑,一旦我把它们都放在ptsScene
中,如何实际映射对象的大致位置。当我刚画这些点时,它们看起来很分散,所以我想我缺少了嵌套向量所表示的内容。函数将返回k
最近邻匹配,即如果调用knnMatch(queryDescriptor,trainsDescriptor,matchesqueryTorain,3)
在这种情况下,k=3
,然后,对于每个训练点,它将从查询集中找到3个最佳匹配项
对于您的向量
,这意味着外部向量
是每个查询->序列匹配的向量,而内部向量
是您的k
最近匹配的向量
在另一个问题中,有一个很好的例子说明了如何使用这些k
匹配以及交叉检查方法
如果您想要一个简单的1-1匹配,那么您可以调用k=1的knnMatch,它将返回大小为1的内部向量,或者只调用match
,它以vector
的形式输出匹配,而不需要第二个向量