我有一个函数map.editTools.startPolyline();
,它从文本文件中读取一些数字并将它们存储在ReadMatFromTxt
中。该函数会跳过包含标题的某些行,并将两个标题行之间的值vector<Mat>
保存到向量Mat
中。遇到标题行时,M_vec
之前累积的值会添加到向量Mat M
。
M_vec
但是,当我在main中使用这个函数时,我看到向量的所有元素都是相同的(尽管文本文件包含不同的值)。
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;
}
我在执行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
时做错了什么。为什么会被覆盖?
答案 0 :(得分:3)
仅限opencv类Mat
赋值运算符和复制构造函数modify a reference counter.由Mat::zeros(rows/2, cols, CV_32FC2)
创建的深层数据保持不变。
要使用多个数据实例
M_vec.push_back(M.clone());