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

1 篇文章 0 订阅
1 篇文章 0 订阅

在图像处理领域,有时我们需要将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();

}


  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值