對於我在C++中的當前項目,我需要一個2D向量,其中包含opencv:Mat矩陣作爲元素。 我發現了一個類似的例子,這產生雙端的2D向量,其工作完全正常:如何初始化包含opencv:矩陣的2D矢量?
vector < vector < deque<int> > > deques_vect2D;
deques_vect2D.resize(vect_col, vector <deque<int> > (vect_row, deque<int> (deque_init_size, deque_init_value)));
但是,使用該對的矩陣不會創建獨立的矩陣的2D向量,改變在改變每一個矩陣的結果2D矢量中的元素。看來,只有一個矩陣存在。
// init 2D vector
vector < vector <Mat> > mat_vect2D;
mat_vect2D.resize(vect_col, vector <Mat> (vect_row, Mat(mat_row, mat_col, CV_32S, Scalar::all(0))));
// change only the first Matrix
mat_vect2D[0][0].at<int>(0, 0) = 1;
mat_vect2D[0][0].at<int>(0, 1) = 2;
for (int r = 0; r < num_of_row; r++)
for (int c = 0; c < num_of_col; c++) {
cout << mat_vect2D[c][r] << endl;
}
// results in... (note how every matrix has changed)
[1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
(...)
是的,我需要矩陣作爲在2D向量元素,那些被認爲是輸入的另一算法稍後(其他數據類型將意味着大量鑄造的)。所以我更喜歡用Matices作爲元素的解決方案,但是矢量可能會被任何其他2D結構所取代。