1.熟悉opencv2 Mat的一些常见语法
(1)创建尺寸较小的矩阵:
Mat M = (Mat_ <double> (2,3) <<1,0,0,0,1,0);
(2)创建矩阵并将矩阵中的元素设置为0或1
Mat A;
A = Mat::zeros(3,2,CV_8UC1);
Mat B;
B = Mat::ones(100,200,CV_8UC3);
(3)提取矩阵中的第i行或第j列
Mat col = A.col(i).clone();
Mat row = B.row(j).clone();
(4)矩阵的转置以及逆
Mat C = A.t();
Mat D = B.inv();
(5)矩阵中元素类型的转换
A.convertTo(A,CV_32FC1);
(6)要注意进行矩阵运算时,矩阵中元素的类型要求
2.将Matlab中的.mat文件转化为.xml文件
在MATLAB中输入以下代码可将工作空间中的矩阵保存为txt文件
save A A -ascii %第一个A是txt文件的名称,第二个A是矩阵的名称
在vs2012中利用以下代码可以读取txt文件中的矩阵,并保存在一个矩阵中
void DownloadSingleMat(Mat &m,String buffer,int rows,int cols)
{
vector<float> vec;
ifstream fin(buffer);
while (fin)
{
float idata;
fin >> idata;
vec.push_back(idata);
}
fin.close();
vec.pop_back();
m.create(rows,cols,CV_32FC1);
for(int k=0;k<m.rows;k++)
{
for(int j=0;j<m.cols;j++)
{
m.at<float>(k,j) = vec.at(m.cols*k+j);
}
}
vec.clear();
}
利用以下代码可以将矩阵保存在xml文件中
FileStorage fs("D:\\data\\test.xml", FileStorage::WRITE);
fs<<"test"<<LRset;
fs.release();
利用以下代码可以读取xml文件中的数据,并保存在矩阵中
void loadMat(Mat &m,String buffer1,String buffer2)
{
FileStorage fs(buffer1, FileStorage::READ);
fs[buffer2] >> m;
fs.release();
m.convertTo(m,CV_32FC1);
}
其中buffer1 = “D:\\data\\test.xml”,buffer2 = "test"
3.注意matlab和C中矩阵的存放规则
matlab 是先列后行再通道,C是先行后列再通道。