将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文件。
假如你有一个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(); }
相关文章推荐
- 将caffemodel文件转换为Matlab可用的数据形式
- matlab生成二维服从高斯分布的数据
- Matlab的学习
- MATLAB绘图与图形处理(3)
- MATLAB绘图与图形处理(2)
- MATLAB绘图与图形处理(1)
- harris角点提取—matlab
- 在matlab2012b中配置system generator 的方法
- MATLAB匹配追踪
- matlab 中diag函数的用法
- matlab 7.0 安装教程
- Matlab中struct的用法
- (matlab)plot画图的颜色线…
- 再遇matlab
- libsvm3.21在MATLAB2014a的安装应用之二:LibSVM基本应用
- libsvm3.21在MATLAB2014a的安装应用之一:安装
- 用Matlab实现字符串分割(split)
- C#与MATLAB混合编程
- 教你如何在Win10/Win8/Win7运行MATLAB7.0
- matlab switch case语句用法