一、mat文件
成都创新互联是一家集网站建设,醴陵企业网站建设,醴陵品牌网站建设,网站定制,醴陵网站建设报价,网络营销,网络优化,醴陵网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
mat数据格式是Matlab的数据存储的标准格式。在Matlab中主要使用load()函数导入一个mat文件,使用save()函数保存一个mat文件。对于文件
load('data.mat')
save('data_1.mat','A')
其中,'A'表示要保存的内容。
二、python中读取mat文件
在python中可以使用scipy.io中的函数loadmat()读取mat文件,函数savemat保存文件。
1、读取文件
如上例:
#coding:UTF-8
import scipy.io as scio
dataFile = 'E://data.mat'
data = scio.loadmat(dataFile)
注意,读取出来的data是字典格式,可以通过函数type(data)查看。
print type(data)
结果显示
type 'dict'
找到mat文件中的矩阵:
print data['A']
结果显示
[[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
。。。。。。。。。。。
0. 0. 0. 0. 0. 0. 0.
0.36470588 0.90196078 0.99215686 0.99607843 0.99215686 0.99215686
0.78431373 0.0627451 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
。。。。。。。。。。。。
0.94117647 0.22745098 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0.30196078
。。。。。。。
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]]
格式为:
type 'numpy.ndarray'
即为numpy中的矩阵格式。
2、保存文件
将这里的data['A']矩阵重新保存到一个新的文件dataNew.mat中:
dataNew = 'E://dataNew.mat'
scio.savemat(dataNew, {'A':data['A']})
使用sicpy.io即可.sicpy.io提供了两个函数loadmat和savemat,非常方便.
以前也有一些开源的库(pymat和pymat2等)来做这个事,
不过自从有了numpy和scipy以后,这些库都被抛弃了.
下面是一个简单的测试程序,具体的函数用法可以看帮助文档:
[python] view plaincopy在CODE上查看代码片派生到我的代码片
import scipy.io as sio
import matplotlib.pyplot as plt
import numpy as np
#matlab文件名
matfn=u'E:/python/测试程序/162250671_162251656_1244.mat'
data=sio.loadmat(matfn)
plt.close('all')
xi=data['xi']
yi=data['yi']
ui=data['ui']
vi=data['vi']
plt.figure(1)
plt.quiver( xi[::5,::5],yi[::5,::5],ui[::5,::5],vi[::5,::5])
plt.figure(2)
plt.contourf(xi,yi,ui)
plt.show()
sio.savemat('saveddata.mat', {'xi': xi,'yi': yi,'ui': ui,'vi': vi})
"""
Created on Sun Nov 29 16:40:18 2020
本工具主要用于mat文件的读取(matlab-v7.3格式)
主要分为3个部分:1 常规mat中的变量
2 mat文件中的cell内部数据读取
3 mat文件中的struct数据读取
@author: ZXY
"""
"""
1 常规mat中的变量
"""
import h5py
b=[]
#首先用h5py读取mat文件,并找到对应的struct 位置。
data = h5py.File("./1.mat",'r')
ecg=data["ecg"].value
"""
2 mat文件中的cell内部数据读取
"""
import h5py
b=[]
#首先用h5py读取mat文件,并找到对应的struct 位置。
data = h5py.File("./2.mat",'r')
zx1=data["ecg_all"]#找到struct的顶部
for i in range(zx1.shape[0]):
ecg=data[zx1[i][0]].value
"""
3 mat文件中的struct数据读取
"""
import h5py
b=[]
#首先用h5py读取mat文件,并找到对应的struct 位置。
data = h5py.File("./3.mat",'r')
zx1=data["ecgpart"]#找到struct的顶部
test = data['ecgpart/data']#找到struct中要提取的子集
for i in test[:,0]:
ecg=zx1[i].value
、Mat类型:矩阵类型Matrix
openCVMat维密集数据数组用处理向量矩阵、图像、直图等等见维数据
Mat3重要:
1、Mat mat = imread(const String* filename); 读取图像
2、imshow(const string frameName, InputArray mat); 显示图像
3、imwrite (const string filename, InputArray img); 储存图像
Mat类型较CvMat与IplImage类型说更强矩阵运算能力支持见矩阵运算计算密集型应用CvMat与IplImage类型转化Mat类型减少计算间花费
A.Mat - IplImage
同创建图像没复制数据
例: // 假设Mat类型imgMat图像数据存
IplImage pImg= IplImage(imgMat);
B.Mat - CvMat
与IplImage转换类似复制数据创建矩阵
例: // 假设Mat类型imgMat图像数据存
CvMat cvMat = imgMat;
二、CvMat类型与IplImage类型:图像类型
openCVMat类型与CvMatIplImage类型都代表显示图像Mat类型侧重于计算数性较高openCVMat类型计算进行优化CvMatIplImage类型更侧重于图像openCV其图像操作(缩放、单通道提取、图像阈值操作等)进行优化
补充:IplImage由CvMat派CvMat由CvArr派即CvArr - CvMat - IplImage
CvArr用作函数参数论传入CvMat或IplImage内部都按CvMat处理
1.CvMat
A.CvMat- IplImage
IplImage* img = cvCreateImage(cvGetSize(mat),8,1);
cvGetImage(matI,img);
cvSaveImage("rice1.bmp",img);
B.CvMat-Mat
与IplImage转换类似选择否复制数据
Mat::Mat(const CvMat* m, bool copyData=false);
openCV没向量(vector)数据结构任何候我要表示向量用矩阵数据表示即
CvMat类型与我线性代数课程向量概念相比更抽象比CvMat元素数据类型并仅限于基础数据类型比面创建二维数据矩阵:
CvMat* cvCreatMat(int rows ,int cols , int type);
type任意预定义数据类型比RGB或者别通道数据我便CvMat矩阵表示丰富彩图像
2.IplImage
类型关系我说IplImage类型继承自CvMat类型包括其变量解析图像数据
IplImage类型较CvMat参数比depthnChannels普通矩阵类型通深度通道数同表示用32位表示RGB+Alpha.图像处理我往往深度与通道数处理做OpenCV图像表示种优化案
IplImage图像另种优化变量origin----原点计算机视觉处理重要便原点定义清楚图像源编码格式甚至操作系统都原选取产影响弥补点openCV允许用户定义自原点设置取值0表示原点位于图片左角1表示左角
dataOrder参数定义数据格式IPL_DATA_ORDER_PIXELIPL_DATA_ORDER_PLANE两种取值前者便于像素同通道数据交叉排列者表示所通道按顺序平行排列
IplImage类型所额外变量都图像表示与计算能力优化
A.IplImage - Mat
IplImage* pImg = cvLoadImage("lena.jpg");
Mat img(pImg,0); // 0复制影像pImg与imgdata共用同记忆体位置header各自
B.IplImage - CvMat
1:CvMat mathdr, *mat = cvGetMat( img, mathdr );
2:CvMat *mat = cvCreateMat( img-height, img-width, CV_64FC3 );
cvConvert( img, mat );
C.IplImage*- BYTE*
BYTE* data= img-imageData;
CvMatIplImage创建区别:
1、建立矩阵第参数行数第二参数列数
CvMat* cvCreateMat( int rows, int cols, int type );
2、建立图像CvSize第参数宽度即列数;第二参数高度即行数 CvMat矩阵相反
IplImage* cvCreateImage(CvSize size, int depth, int channels );
CvSize cvSize( int width, int height );
IplImage内部buffer每行按4字节齐CvMat没限制
补充:
A.BYTE*- IplImage*
img= cvCreateImageHeader(cvSize(width,height),depth,channels);
cvSetData(img,data,step);
//首先由cvCreateImageHeader()创建IplImage图像制定图像尺寸深度通道数;
//由cvSetData()根据BYTE*图像数据指针设置IplImage图像数据数据
//其step指定该IplImage图像每行占字节数于1通道IPL_DEPTH_8U图像step等于width