2013-04-22 55 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); 
}