【问题标题】:Store KeyPoints and descriptors in Mat structure/list在 Mat 结构/列表中存储关键点和描述符
【发布时间】:2014-03-20 19:50:39
【问题描述】:

我想将几个图像的所有预先计算的关键点/描述符存储在一个 Mat 列表/结构或其他东西中,这样我以后就可以使用它们来将它们与其他图像描述符匹配。 你有想法吗?

显然有办法使用

List<Mat>

但我不知道怎么做。

【问题讨论】:

    标签: c++ opencv image-processing mat


    【解决方案1】:

    您将一张图像的描述符存储在一个Mat 变量中。所以,基本上你有一个Mat 一个描述符。所以,如果你有 100 个描述符,那么所有这些描述符都应该出现在一个 Mat 中。你可以这样做:

    第 1 步:声明 vectorMat 类型。

    vector<Mat> allDescriptors;
    

    Step-2:然后找到每张图片的描述符,并以Mat格式存储

    Mat newImageDescriptor;
    

    Step-3:最后,将上面计算的描述符推入向量中。

    allDescriptors.push_back(newImageDescriptor);
    

    对所有图片重复第 2 步和第 3 步

    现在,您可以通过以下方式访问它们:

    您可以像访问arrays 一样访问vector 中的数据

    所以allDescriptors[0] 会给你Mat 格式的第一个描述符

    因此,通过使用for loop,您可以访问所有描述符。

    for(int i=0; i<allDescriptors.size(); i++)
    {
        Mat accessedDescriptor;
        allDescriptors[i].copyTo(accessedDescriptor);
    }
    

    【讨论】:

    • 我将更新我的答案...请稍等
    • 我没有测试过代码,但逻辑是正确的,我以前用过,如果你有任何错误,请告诉我。
    • hello skm,我刚刚运行了我的代码,它运行良好,但是如何将 allDescriptors 存储在另一个 vector 中?我尝试了 copyTo,但遇到了异常。
    • 我保留了另一个答案..看看它
    【解决方案2】:

    如果您的元素存储在连续数组中,您可以将它们assign 一次添加到列表中:

    #include <list>
    std::list<Mat> l;
    l.assign( ptr, ptr + sz); // where ptr is a pointer to array of Mat s
                              // and sz is the size of array
    

    创建预先计算的元素:

    Mat mat1;
    Mat mat2;
    

    以及这种类型的元素列表:

    #include <list>
    std::list<Mat> l;
    

    将元素添加到列表中:

    l.push_back( mat1);
    l.push_back( mat2)
    

    注意:还有其他修饰符可用于插入元素。你会发现他们的描述here。您可以考虑使用其他容器。选择合适的容器非常重要。您必须考虑对您至关重要的操作,这些操作将被最常调用。

    【讨论】:

      【解决方案3】:

      这是关于您将vector&lt;Mat&gt; 复制到另一个vector&lt;Mat&gt; 的另一个问题

      假设您有一个向量vector&lt;Mat&gt; des1,并且您想将其复制到vector&lt;Mat&gt; des2,那么您应该执行以下操作:

      for(int i=0; i<des1.size(); i++)
      {
          des1[i].copyTo(des2[i]);
      }
      

      请记住,vector&lt;Mat&gt; 类似于 Mat 的数组。那么,如何通过CopyTo 将一个向量复制到另一个向量,该向量用于复制一个矩阵。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-30
        • 2021-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-06
        相关资源
        最近更新 更多