在数据结构中存储不同大小的图像,OpenCV

时间:2013-04-22 07:34:51

标签: c++ matlab opencv

我想知道是否有任何方法可以使用OpenCV(C ++)在单个数据结构中保存(或存储)不同大小的图像。例如,在MATLAB中我可以使用“cell”来完成。

具体来说,我生成的结果是不同大小的图像,如果我可以将它们存储在单个数据结构中,我将感激不尽。所以,我可以在后期使用它。 请注意,这必须使用C ++和OpenCV完成。

我正在尝试使用:std :: vector。非常感谢。

2 个答案:

答案 0 :(得分:3)

Yeah you can try this

    std::vector<cv::Mat> ImageDataBase;

for(int i=0;i<length_of_imageDataBase;i++)
{
  cv::Mat img = cv::imread("Address of the images");
  ImageDataBase.pushback(img);
}

答案 1 :(得分:2)

我认为这个问题存在于你对c ++中的对象的思考方式。 Matlab要求对象在一个向量/数组/矩阵中具有相同的大小,但是应该调用它,因为它被优化为对矩阵进行操作,并且这些操作非常依赖于矩阵的维度。

在c ++中,主要实体是一个对象。与matlab矢量最相似的是一个数组,如cv::Mat potatoes[30]。然而,即使这样也只需要填充同一类的对象,而忽略那些cv::Mat内容的大小。

所以,要总结一下,你有几个选择:

  • 一个数组,比如cv::Mat crazySocks[42] - 你需要在这里小心,因为你需要知道会有多少袜子,如果你没有数组边界,你可能会出现分段错误
  • 一个向量,正如Vinoj John Hosan所建议的那样,std::vector<cv::Mat> jaguars - 这是个好主意,因为stl容器可以对它们的内容做一些好的技巧,你可以轻松地修改向量的大小。
  • 列表,例如std::list<cv::Mat> toFind - 如果您打算经常修改容器的大小,这比vector更好。
  • 前面提到的任何一个,但是有一些指针,比如cv::Mat *crazyPointers[33] - 当你有一些大的物体可以移动时,最好只移动它们所在位置的信息,而不是物体。cv::Mat做一些内部使用它的数据,所以不应该这样。