我已經閱讀了一些關於C中動態增長數組的內容,但我看不到如何創建一個2D增長數組(如在MATLAB中)。我有一個函數來爲某些圖像處理構造一個數組,但是我不知道這個數組(cols和rows)的大小是多少。我如何創建這個?C++ 2D增長數組像MATLAB一樣
我讀了一些關於malloc和realloc的內容。這些功能對於這個問題是便攜的或有用的。
編輯:已解決,使用Armadillo library,一個C++線性代數庫。
我已經閱讀了一些關於C中動態增長數組的內容,但我看不到如何創建一個2D增長數組(如在MATLAB中)。我有一個函數來爲某些圖像處理構造一個數組,但是我不知道這個數組(cols和rows)的大小是多少。我如何創建這個?C++ 2D增長數組像MATLAB一樣
我讀了一些關於malloc和realloc的內容。這些功能對於這個問題是便攜的或有用的。
編輯:已解決,使用Armadillo library,一個C++線性代數庫。
簡單的是與指針
int nrows = 10;
int ncols = 5;
double* matrix = new double[mrows*ncols];
然後,就好像它是一個二維數組like您可以訪問它。
所以,如果你想matrix[row][col]
,你會做
int offset = row*ncols+col;
double value = matrix[offset];
另外,如果你想Matlab的像在C++矩陣的舒適性,考慮Armadillo
他正在尋找一個動態調整大小的解決方案。 – pmr 2011-03-18 19:45:50
我認爲他的「動態」是在編譯時創建一個未知大小的二維數組?我想我只是誤解了它。無論如何,犰狳可能是他正在尋找的東西。它被設計成用於C++的matlab -esq矩陣庫。 – Chris 2011-03-18 20:04:55
我正在使用犰狳,但我無法調整一個arma :: mat變量..我使用重塑方法,但這隻能調整行大小,如果我嘗試調整cols大小我有一個錯誤:「run-時間錯誤:Mat :: operator():越界「.. – matiasfh 2011-03-19 19:43:22
通過增大像Matlab一個數組,我「M假設你的意思做這樣的事情:
mat = [mat; col]
,您可以調整C++中的矩陣,而不是用乾淨的語法類似上面。
例如,您可以使用std::vector<std::vector<T>>
來表示您的矩陣。
std::vector<std::vector<int> > mat;
然後添加一列:
for (int i=0; i<mat.size(); i++) mat[i].push_back(col[i]);
或添加一行
mat.push_back(row); // row is a std::vector<int>
C++不具有每本身標準矩陣類。我認爲這樣的班級有太多的不同用途,因此不可能制定出一種適合所有人的解決方案。在Stroustrup的書(The C++ Programming Language(第三版))中有一個例子和討論,關於數值矩陣的簡單實現。
但是,對於圖像處理來說,使用現有的庫會更好。
你可能會看看CImg。我之前使用過它,發現它很快並且有據可查。
如果你在一臺AMD機器上,我知道AMD有一個優化的圖像處理庫,Framewave項目。另外,如果你習慣了MATLAB風格的代碼,那麼你可能想看看it++。 我認爲項目的目標是儘可能地與MATLAB相似。
+1對於OpenCV,在進行圖像分析時特別有用,因爲它可以抽象出底層的數據類型(GRAYSCALE,RGB等)。
查找專爲矩陣分析而設計的庫。 C++更通用,標準庫中沒有包含這樣的內容。 – 2011-03-18 19:38:05
+1 for armadillo解決方案 – nkint 2012-02-14 12:36:57