gpt4 book ai didi

c++ - 如何初始化包含opencv :matrices?的二维 vector

转载 作者:太空狗 更新时间:2023-10-29 21:44:00 25 4
gpt4 key购买 nike

对于我当前的 C++ 项目,我需要一个 2D vector ,其中包含 opencv:Mat 矩阵作为元素。我找到了一个类似的例子,它创建了一个双端队列的二维 vector ,效果非常好:

vector < vector < deque<int> > > deques_vect2D;
deques_vect2D.resize(vect_col, vector <deque<int> > (vect_row, deque<int> (deque_init_size, deque_init_value)));

但是,将此用于矩阵的二维 vector 不会创建独立的矩阵,更改一个矩阵会导致更改二维 vector 中的每个元素。似乎只有一个矩阵存在。

// 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 Vector 中的元素,因为这些元素稍后应该被输入到另一个算法中(其他数据类型将意味着大量转换)。所以我更喜欢以矩阵作为元素的解决方案,但是 vector 可能会被任何其他二维结构所取代。

最佳答案

我认为问题在于您使用了填充构造函数:

explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type());

Constructs a container with n elements. Each element is a copy of val.

( http://www.cplusplus.com/reference/vector/vector/vector/ )

因此,您将相同引用的每个二维元素初始化为 Mat() 对象。在上面的示例中,它之所以有效,是因为您只将整数存储为值...

为什么不以非常普通的方式进行初始化:

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)));
}

这将为二维 vector 的每个元素分配一个 Mat() 实例

关于c++ - 如何初始化包含opencv :matrices?的二维 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21365396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com