2014-01-26 2 views
3

현재 프로젝트는 C++에서 opencv : Mat Matrices를 요소로 포함하는 2D 벡터가 필요합니다. 모든 변경 한 매트릭스 결과를 변경, 독립적 인 행렬을 생성하지 않는 행렬의 2 차원 벡터에 대해이 작업을 사용하여, 그러나opencv : matrices가 포함 된 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))); 

: 나는 완벽하게 잘 작동 deques의 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 구조로 대체 될 수 있습니다.

답변

2

나는 문제가 당신이 채우기 생성자 사용할 생각 :

명시 적 벡터 (말하자면 size_type n을, CONST VALUE_TYPE & 발 = VALUE_TYPE을(), CONST)은 (& ALLOC = allocator_type을 allocator_type);

n 개의 요소가있는 컨테이너를 생성합니다. 각 요소 은 val의 사본입니다.

(http://www.cplusplus.com/reference/vector/vector/vector/는) 그래서 당신은 매트() 객체에 동일한 기준의 각 요소에 2D를 초기화합니다. 당신이 값으로 단지의 int를 저장하기 때문에 작동 위의 예에서 ... 그냥 아주 평범한 방법으로 초기화되지 않는 이유는

가 :

vector < vector <Mat> > mat_vect2D; 
for(int i = 0;i<vect_row;i++) { 
    mat_vec2D.push_back(vector<Mat>()); 
    for(int j=0;j<vect_col;j++) 
     mat_vec2D[i].push_back(Mat(mat_row, mat_col, CV_32S, Scalar::all(0))); 
} 

이 2D 벡터의 각 요소에 할당 할 a new Mat()의 인스턴스

관련 문제