您的位置:首页 > 编程语言 > MATLAB

将MATLAB中的mat数据转换为OpenCV能够读取的xml数据

2015-12-30 21:54 603 查看
在图像处理领域,有时我们需要将MATLAB中的程序移植到C平台上,这时最好的办法就是利用视觉图像处理库OpenCV来实现。然而,MATLAB中的mat数据我们无法直接读取到OpenCV工程中去,OpenCV只能读取xml型的数据,所以我们呢需要将mat型数据转换为xml型数据。

假如你有一个data.mat(11行,2列)数据,要把其转换为data.xml文件

具体步骤如下:

1.利用MATLAB打开data.mat数据

load data



2.在Matlab中将data变量中的数据写入一个txt文件中,假如为data.txt

dlmwrite(‘data.txt’,data);



3.然后利用MATLAB打开data.txt文档(双击data.txt),你会发现数据如图所示,行内每个数据之间都有一个逗号



4.将上图红色框中的数据复制到一个新的txt文件中(一定要在MATLAB打开的这个界面下复制data.txt中的数据),假如我们已经新建了一个sun.txt



5.将sun.txt中的逗号“,”全部用空格替换掉,最后保存sun.txt文件。





6.下面就可以利用C程序创建xml文件,并读取xml文件。

#include<opencv2/opencv.hpp>
#include<iostream>
#include "fstream"
using namespace cv;
using namespace std;

#define MAXLENGTH 1000000
float tmpf[MAXLENGTH];

void createxml( char* filename, int rows, int cols ); //创建xml文件
void readxml( char* filename, Mat& dst); //读取xml文件
void main()
{
char filename[100];
memset( filename, 0, 100);//清空
strcpy (filename,"sun");
int rows=11, cols=2;            //数据的大小
createxml(  filename,  rows,  cols ) ;

//把xml文件中的数据读取到Mat型的data矩阵中
Mat data;
memset( filename, 0, 100);//清空
strcpy (filename,"sun");
readxml( filename, data );
}

void createxml( char* filename,  int rows,  int cols )
{
//读取filename.txt中的数据,并存取到filename.xml文件中
char FileName[100];
strcpy( FileName,filename);
const char* type = ".txt";
strcat( FileName,type);
fstream file;
file.open( FileName, ios::in );
if(!file)
cout<<"file not founded"<<endl;
//int tmp[length];

int pos = 0;
while(!file.eof())//是否到文件结尾
{
file>>tmpf[pos];
pos++;
if( pos>=MAXLENGTH )
break;
}
file.close();
CvMat *Data=cvCreateMat( rows, cols, CV_32FC1 );  //CV_32FC1表示float型,这里的设置取决于filename.txt中的数据类型
cvInitMatHeader( Data, rows, cols , CV_32FC1, tmpf);
char Name[100];
strcpy( Name,filename);
strcat( Name,".xml");
cvSave( Name, Data );
cvReleaseMat( &Data );
}

void readxml( char* filename, Mat& dst)
{
//读取filename.xml文件中数据到Mat型的dst矩阵中
char FileName[100];
strcpy( FileName,filename);
const char* type = ".xml";
strcat( FileName,type);
FileStorage fs( FileName, FileStorage::READ);
if (!fs.isOpened())
{
cerr << "failed to open " << FileName << endl;
}
fs[filename]>>dst;
fs.release();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: