如何初始化包含OpenCV的2D向量:矩阵
How to initialize a 2D vector containing opencv:matrices?
对于我在C 中的当前项目,我需要一个2D向量,其中包含OpenCV:MAT矩阵作为元素。我找到了一个类似的示例,该示例创建了一个2D向量的deques,它的工作原理很好:
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向量中的元素,因为后来应该输入其他算法(其他数据类型可能意味着很多铸件)。因此,我更喜欢用乳剂作为元素的解决方案,但是,矢量可能被任何其他2D结构所取代。
我认为问题是您使用填充构造函数:
显式向量(size_type n,const value_type&amp; val = value_type(), const allocator_type&amp;alloc = alloc_type());
构造一个具有N元素的容器。每个元素 是Val的副本。
(http://www.cplusplus.com/reference/vector/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)));
}
这将分配给Mat()
相关文章:
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 如何在 C++ 中使用它的构造函数初始化 unique_ptrs 的 2D 向量?
- 哪个更快:在 1d 向量中按字符串搜索还是在 2d 向量中按向量搜索?
- 分配具有 2D 向量大小的变量的内存
- 在统一内存 CUDA C/C++ 中分配 2D 向量
- 索引 2D 向量时'Reference to type const..'编译错误
- 查找 2D 向量的位置,该向量是类C++的一个元素
- 如何在 C++ 中的函数中传递 2D 向量的子向量
- 为 2D 向量类创建标量乘法运算符
- 无法使用push_back将整数插入1D/2D向量
- 如何将列附加到现代C 中的2D向量
- parallel_for lambda 函数填充 2D 向量后出错
- 类对象指针C 的2D向量
- 将1D或2D向量传递给同一类的构造函数
- 如何初始化2D向量C
- 在类的构造函数中初始化 2D 向量
- 对通过引用传递的 2d 向量进行排序
- 如何在C 2D向量中找到对象(而不是int)的位置
- 如何在C 中打印一个对象的2D向量
- 双打分类/编辑问题的2D向量