如何将来自不同图像的多个描述符存储在 C++ 和 OpenCV 中的向量向量中?

Posted

技术标签:

【中文标题】如何将来自不同图像的多个描述符存储在 C++ 和 OpenCV 中的向量向量中?【英文标题】:How to store multiple descriptors, from different images, in a vector of vectors in C++ and OpenCV? 【发布时间】:2015-04-16 12:03:54 【问题描述】:

我正在使用 OpenCV 来评估一些人脸识别算法,目前我正在使用 HoG(定向梯度直方图)

我希望将来自多个图像的描述符存储在一个向量中,以供以后比较。

对于每个图像,它将 X 描述符存储在一个浮点向量中,通常这样初始化:

vector <float> descriptors;

所以,为了存储很多,我认为初始化应该是这样的:

vector <vector <float> > descriptors;

虽然程序编译正常,但它在hog.compute处停止,没有任何警告或错误。

for (i = 0; i < images.size(); i++)

    hog.compute(images[i], descriptors[i], Size(16,16), Size(4,4), locs);


有什么提示或建议吗?

提前谢谢你!

【问题讨论】:

hog.compute 是如何定义的? “停止”是什么意思? 你有没有想过在 for 循环之前用 N 个空的 vector&lt;float&gt; 填充 descriptors(其中 N 是图像的数量)? 谢谢MikeMB,实际上问题出在空间分配上:) “停止”是指程序在没有任何信息的情况下崩溃。确实@AldurDisciple,正是如herohuyongtao所描述的那样!谢谢大家! 【参考方案1】:

您应该在调用descriptors 之前为其分配足够的空间。 vector &lt;vector &lt;float&gt; &gt; descriptors;只有一个空容器,如果你试图访问它的元素,它会崩溃,即descriptors[0],因为当前是descriptors.size()==0

你可以简单地改变

vector <vector <float> > descriptors;

vector <vector <float> > descriptors(images.size());

vector <vector <float> > descriptors;
descriptors.resize(images.size());

【讨论】:

以上是关于如何将来自不同图像的多个描述符存储在 C++ 和 OpenCV 中的向量向量中?的主要内容,如果未能解决你的问题,请参考以下文章

如果它们都具有相同的 id,如何将来自 sql 查询的图像存储在不同的变量下?

如何在多个图像视图中设置多个图像

如何在不将单独的帧图像写入磁盘的情况下从 C++ 程序中生成的多个图像编码视频?

如何将驻留在账户 A 中的 s3 存储桶的访问权限授予来自多个 aws 账户的不同 iam 用户?

在 C++ 中的多个类中使用模板类

如何在向量中存储多个类的不同对象?