gpt4 book ai didi

c++ - std::vector 元素被覆盖

转载 作者:行者123 更新时间:2023-11-28 00:11:21 26 4
gpt4 key购买 nike

我有一个函数 ReadMatFromTxt从文本文件中读取一些数字并将它们存储在 vector<Mat> 中.该函数跳过一些包含标题的行,并将两个标题行之间的值保存为 Mat进入 vector M_vec .当遇到标题行时,在 Mat M 中累积的值直到那时被添加到 vector M_vec .

vector<Mat> ReadMatFromTxt(string filename, int rows, int cols)
{
double m;
Mat M = Mat::zeros(rows/2, cols, CV_32FC2); //Matrix to store values
vector<Mat> M_vec;

ifstream in(filename.c_str());
int lineNo = 0;
int cnt = 0; //index starts from 0
string line;

while(getline(in, line))
{
istringstream iss(line);
if(((lineNo % (rows+1)) == 0) && lineNo != 0)
// header found, add Mat to vector<Mat>
{
cout << M << endl;
M_vec.push_back(M);

cnt = 0;
lineNo++;
}
else
{
while (iss >> m)
{
int temprow = cnt / cols;
int tempcol = cnt % cols;
if(cnt < (rows*cols)/2) {
M.at<Vec2f>(temprow, tempcol)[0] = m;
} else {
M.at<Vec2f>(temprow - rows/2 , tempcol)[1] = m;
}
cnt++;
}
lineNo++;
}
}

return M_vec;
}

但是,当我在 main 中使用这个函数时,我发现 vector 的所有元素都是相同的(尽管文本文件包含不同的值)。

vector<Mat> M_vec;
M_vec = ReadMatFromTxt(txt_path.string(), rows, cols);

for(int i=0; i<M_vec.size(); i++)
{
cout << "M_vec[" << i << "] = " << M_vec[i] << endl;
}

我在做 push_back 时做错了什么吗?添加Mat到 vector 。为什么会这样覆盖?

最佳答案

opencv 类 Mat 赋值运算符和复制构造函数而已 modify a reference counter. Mat::zeros(rows/2, cols, CV_32FC2) 创建的深度数据保持不变。

有多个数据使用实例

M_vec.push_back(M.clone());

关于c++ - std::vector 元素被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32951468/

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