如何将来自不同图像的多个描述符存储在 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<float>
填充 descriptors
(其中 N 是图像的数量)?
谢谢MikeMB,实际上问题出在空间分配上:) “停止”是指程序在没有任何信息的情况下崩溃。确实@AldurDisciple,正是如herohuyongtao所描述的那样!谢谢大家!
【参考方案1】:
您应该在调用descriptors
之前为其分配足够的空间。 vector <vector <float> > 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++ 程序中生成的多个图像编码视频?