我想将所有我预先计算好的几个图像的关键点/描述符存储在Mat列表/结构中,所以我以后可以使用它们将它们与其他图像描述符进行匹配。 你有好主意吗?
显然,有一种方法可以使用
List<Mat>
但我不知道如何。
答案 0 :(得分:0)
如果您的元素存储在连续数组中,您可以使用以下内容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。您可以考虑使用其他容器。选择合适的容器非常重要。您必须考虑对您来说至关重要的操作,这些操作最常被调用。
答案 1 :(得分:0)
将一个图像的描述符存储在一个Mat
变量中。所以,基本上你有一个Mat
用于一个描述符。因此,如果您有100个描述符,那么所有这些描述符都应该出现在一个Mat
中。你可以这样做:
第1步:声明vector
Mat
类型。
vector<Mat> allDescriptors;
步骤2:然后查找每个图片的描述符并以Mat
格式存储
Mat newImageDescriptor;
步骤3:最后,将上面计算的描述符推送到向量中。
allDescriptors.push_back(newImageDescriptor);
重复步骤2&amp; 3适用于所有图像
现在,您可以按以下方式访问它们:
如果vector
arrays
中的数据
所以allDescriptors[0]
会以Mat
格式
因此,通过使用for loop
,您可以访问所有描述符。
for(int i=0; i<allDescriptors.size(); i++)
{
Mat accessedDescriptor;
allDescriptors[i].copyTo(accessedDescriptor);
}
答案 2 :(得分:0)
这是关于您将vector<Mat>
复制到另一个vector<Mat>
假设您有一个向量vector<Mat> des1
并且您想要将其复制到vector<Mat> des2
,那么您应该执行以下操作:
for(int i=0; i<des1.size(); i++)
{
des1[i].copyTo(des2[i]);
}
请记住,vector<Mat>
类似于Mat
的arrya。那么,如何通过CopyTo
将矢量复制到另一个矢量,用于复制矩阵。