2013-04-22 53 views
2

我想知道是否有任何方式使用的OpenCV以保持(或存储)的不同尺寸的图像在单个数据结构(C++)。例如,在MATLAB中,我可以通过使用“单元格”来完成。存储图像,OpenCV的

具体来说,我生成我的成果,这是不同大小的图像,它会为我是炉排,如果我可以将它们存储在一个单一的数据结构。所以,我可以晚点使用它。 请注意,这必须用C++和OpenCV完成。

我想给一个尝试:std :: vector。非常感谢。

+2

给它'的std :: VECTOR'一试! – 2013-04-22 07:41:47

+0

在OpenCV中使用+1许多函数'std :: vector ' – Amro 2013-04-22 08:59:49

回答

2

我认为这个问题存在于你思考C++中的对象的方式中。 Matlab需要在一个vector/array/matrix /中有相同大小的对象,但它应该被调用,因为它被优化以在矩阵上运行,并且这些操作非常依赖于矩阵的维数。

在C++中,主要实体是一个对象。与matlab矢量最相似的是一个数组,如cv::Mat potatoes[30]。然而,即使这只需要充满同一班级的对象,不管这些内容的大小如何。

所以,包了这一切,你有两个选择:

  • 阵列,像cv::Mat crazySocks[42] - 你必须要小心在这里,因为你需要知道有多少袜子都会有,你可能会如果你出去数组边界
  • 的向量的分割错误,通过Vinoj约翰Hosan的建议,像std::vector<cv::Mat> jaguars - 这是一个好主意,因为STL容器可以做一些很好的运用了自己的内容,你可能轻松修改矢量的大小。
  • 一个列表,如std::list<cv::Mat> toFind - 如果您计划经常修改您的容器的大小,这比向量更好。
  • 任何前面提到的,但三分球,像cv::Mat *crazyPointers[33] - 当你有一些大的物体移动,最好是只移动信息有关他们在哪里,不是对象。 cv::Mat在内部使用它的数据做一些技巧,所以它不应该是这样。
+0

非常感谢你们所有人。我已经尝试过使用std :: vector ,它对我目前的情况非常有用。 @morynicz再次感谢您的好意。但是,我不能预先采用固定大小的数组。但是,我喜欢一个列表的想法(标准::名单也是我要一个给试图将其 – Sanchit 2013-04-23 06:52:59

+0

@morynicz:。只是说句公道话,相当于MATLAB一般的容器是[电池阵列(HTTP:// www.mathworks.com/help/matlab/cell-arrays.html) – Amro 2013-04-23 09:58:41

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); 
}