【问题标题】:How to create a descriptor matrix in OpenCV如何在 OpenCV 中创建描述符矩阵
【发布时间】:2014-04-25 17:39:18
【问题描述】:

如何在 OpenCV 中创建可与 OpenCV 中的 DescriptorMatchers 之一一起使用的描述符,方法如下。

cv::BFMatcher matcher( cv::NORM_L2, false );
std::vector< cv::DMatch > matches;
matcher.match( descriptors_1, descriptors_2, matches );

我已经有以下描述符类。如何转换或创建可与 DescriptorMatcher 一起使用的新矩阵。最好是BFMatcher。

class Descriptor
{
    public:
    float lxi, lyi; // Location of descriptor
    vector<double> feature;

    Descriptor()
    {
    }

    Descriptor(float x, float y, vector<double> const& f)
    {
         lxi = x;
         lyi = y;
         feature = f;
    }
};

【问题讨论】:

  • opencv 的描述符是 1d float(SIFT/SURF) 或 uchar(ORB;BRIEF,etc) Mat 的。所以你的 Descriptor 类和你的 vector 都不会工作
  • 我可以放弃我的 Descriptor 类。有没有办法通过我的代码创建一个新的描述符矩阵?我找不到有关矩阵结构或形式的任何信息。
  • 不知道如何创建(自定义?)描述符,但您可以创建一个 Mat 和 push_back() 值(就像使用向量一样)
  • 我将特征中的 128 个特征和每个描述符中 128 个特征的关键点的 x,y 推送到其他描述符的数组中。
  • 我也想知道这个问题的答案,没有关于如何创建自定义描述符的文档。

标签: c++ c opencv image-processing feature-descriptor


【解决方案1】:

我只是在寻找有关同一问题的答案时访问这里。 但很快我发现答案很简单,你只需要做一个垫子。

例如,下面是一些 SIFT-LIKE 描述符。

cv::Mat descriptors_1(nQueries, dimemsion, CV_32F,(void*)pQueries);
cv::Mat descriptors_2(m_nDataSets, dimemsion, CV_32F,(void*)m_pData);

cv::FlannBasedMatcher matcher;
std::vector< cv::DMatch > matches;
matcher.match( descriptors_1, descriptors_2, matches );

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多