c++ - 从 SIFT 的 OpenCV 匹配中获取关键点的坐标

标签 c++ opencv sift

我想从SIFT的OpenCV匹配中获取关键点的坐标,我不知道匹配数据结构的注释。我一直在尝试这样做:

vector<DMatch> matches;
matcher.match(descriptors1,descriptors2,matches);
for(vector<DMatch>::size_type i=0; i<matches.size(); i++)
{
    cout<< key_points1[ matches[i].trainIdx].pt <<"与之匹配特征点坐标"<< key_points2[ matches[i].imgIdx].pt<<endl; 
}

但它不起作用。谁能帮帮我?

最佳答案

DescriptorMatcher 类的match 函数具有以下签名:

void match( const Mat& queryDescriptors, const Mat& trainDescriptors,
            vector<DMatch>& matches, const Mat& mask=Mat() ) const;

我假设 key_points1 对应于 descriptors1key_points2 对应于 descriptors2

首先要研究的是将 descriptors1 作为 queryDescriptors 传递,然后使用 trainIdx 作为索引。您可能必须在那里使用 queryIdx
因此,对于 key_points2,您必须使用 trainIdx

vector<DMatch> matches;
matcher.match(descriptors1,descriptors2,matches);
for(vector<DMatch>::size_type i=0; i<matches.size(); i++)
{
  cout<< key_points1[ matches[i].queryIdx].pt // Query is first.
      <<"与之匹配特征点坐标"
      << key_points2[ matches[i].trainIdx].pt // Training is second.
      <<endl; 
}

希望对您有所帮助!

关于c++ - 从 SIFT 的 OpenCV 匹配中获取关键点的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29223441/

相关文章:

c++ - 如何对包含 const 值的 vector 进行排序

c++ - 使用 CMake 链接到 Windows 上的静态库时出现问题

opencv - 解释支持向量机训练文件。 SVM.predict后如何计算置信度?

java - C++ 到 Java - OpenCV

opencv - 用于训练机器学习算法的矩阵未处理的异常

sift - 高斯差分的重要性

c++ - 如何使用UTF8将代码点与freetype结合使用?

c++ - Emacs 缩进模板类/函数

python - OpenCV在Raspberry Pi上返回无类型对象而不是字节对象

c++ - 使用 OpenCV 丢弃细胞图像中的异常值 SIFT 关键点