Mat Vec2Mat(vector<vector<float>> vec) //二维Vector转Mat
{
int row = vec.size();
int col = vec[0].size();
Mat img(row ,col, CV_32F);
float *ptmp = NULL;
for (int i = 0; i <row; ++i)
{
ptmp = img.ptr<float>(i);
for (int j = 0; j < col; ++j)
{
ptmp[j] = vec[i][j];
}
}
return img;
}
ifstream f1;
f1.open("淡蓝色.txt"); //每行的各个数据必须以空格隔开
string str;
vector<vector<float> > num;
while(getline(f1, str)) //将淡蓝色.txt中的数据保存到num中
{
istringstream input(str); //istringstream 类的作用自行百度
vector<float> tmp;
float a;
while(input >> a)
tmp.push_back(a);
num.push_back(tmp);
}
cv::Mat trainingDataMat;
trainingDataMat = Vec2Mat(num);
//cout<<trainingDataMat<<endl;
注:一维vector转Mat可以直接用Mat的构造函数trainingDataMat = Mat(num, true);,但是二维vector转Mat这个方法并不成功。