扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
一、Mat类型:矩阵类型,Matrix。在openCV中,Mat是一个多维的密集数据数组。可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。Mat有3个重要的方法:1、Matmat=imread(constString*filename);读取图像2、imshow(conststringframeName,InputArraymat);显示图像3、imwrite(conststringfilename,InputArrayimg);储存图像Mat类型较CvMat与IplImage类型来说,有更强的矩阵运算能力,支持常见的矩阵运算。在计算密集型的应用当中,将CvMat与IplImage类型转化为Mat类型将大大减少计算时间花费。A.Mat-IplImage同样只是创建图像头,而没有复制数据。例://假设Mat类型的imgMat图像数据存在IplImagepImg=IplImage(imgMat);B.Mat-CvMat与IplImage的转换类似,不复制数据,只创建矩阵头。例://假设Mat类型的imgMat图像数据存在CvMatcvMat=imgMat;二、CvMat类型与IplImage类型:“图像”类型在openCV中,Mat类型与CvMat和IplImage类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化。而CvMat和IplImage类型更侧重于“图像”,openCV对其中的图像操作(缩放、单通道提取、图像阈值操作等)进行了优化。补充:IplImage由CvMat派生,而CvMat由CvArr派生即CvArr-CvMat-IplImageCvArr用作函数的参数,无论传入的是CvMat或IplImage,内部都是按CvMat处理。1.CvMatA.CvMat-IplImageIplImage*img=cvCreateImage(cvGetSize(mat),8,1);cvGetImage(matI,img);cvSaveImage("rice1.bmp",img);B.CvMat-Mat与IplImage的转换类似,可以选择是否复制数据。Mat::Mat(constCvMat*m,boolcopyData=false);在openCV中,没有向量(vector)的数据结构。任何时候,但我们要表示向量时,用矩阵数据表示即可。但是,CvMat类型与我们在线性代数课程上学的向量概念相比,更抽象,比如CvMat的元素数据类型并不仅限于基础数据类型,比如,下面创建一个二维数据矩阵:CvMat*cvCreatMat(introws,intcols,inttype);这里的type可以是任意的预定义数据类型,比如RGB或者别的多通道数据。这样我们便可以在一个CvMat矩阵上表示丰富多彩的图像了。2.IplImage在类型关系上,我们可以说IplImage类型继承自CvMat类型,当然还包括其他的变量将之解析成图像数据。IplImage类型较之CvMat多了很多参数,比如depth和nChannels。在普通的矩阵类型当中,通常深度和通道数被同时表示,如用32位表示RGB+Alpha.但是,在图像处理中,我们往往将深度与通道数分开处理,这样做是OpenCV对图像表示的一种优化方案。IplImage的对图像的另一种优化是变量origin----原点。在计算机视觉处理上,一个重要的不便是对原点的定义不清楚,图像来源,编码格式,甚至操作系统都会对原地的选取产生影响。为了弥补这一点,openCV允许用户定义自己的原点设置。取值0表示原点位于图片左上角,1表示左下角。dataOrder参数定义数据的格式。有IPL_DATA_ORDER_PIXEL和IPL_DATA_ORDER_PLANE两种取值,前者便是对于像素,不同的通道的数据交叉排列,后者表示所有通道按顺序平行排列。IplImage类型的所有额外变量都是对“图像”的表示与计算能力的优化。A.IplImage-MatIplImage*pImg=cvLoadImage("lena.jpg");Matimg(pImg,0);//0是不复制影像,也就是pImg与img的data共用同个记忆体位置,header各自有B.IplImage-CvMat法1:CvMatmathdr,*mat=cvGetMat(img,mathdr);法2:CvMat*mat=cvCreateMat(img-height,img-width,CV_64FC3);cvConvert(img,mat);C.IplImage*-BYTE*BYTE*data=img-imageData;CvMat和IplImage创建时的一个小区别:1、建立矩阵时,第一个参数为行数,第二个参数为列数。CvMat*cvCreateMat(introws,intcols,inttype);2、建立图像时,CvSize第一个参数为宽度,即列数;第二个参数为高度,即行数。这个和CvMat矩阵正好相反。IplImage*cvCreateImage(CvSizesize,intdepth,intchannels);CvSizecvSize(intwidth,intheight);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。
从策划到设计制作,每一步都追求做到细腻,制作可持续发展的企业网站。为客户提供网站设计、成都做网站、网站策划、网页设计、域名注册、虚拟主机、网络营销、VI设计、 网站改版、漏洞修补等服务。为客户提供更好的一站式互联网解决方案,以客户的口碑塑造优易品牌,携手广大客户,共同发展进步。
你在刷题啊
def mk_mat(num):
output = []
for i in range(num):
output.append([x+i*10 for x in range(num)])
return output
print mk_mat(4)
1、首先打开pycharm软件,新建一个python文件并导入numpy库。
2、然后创建矩阵A,这里先创建一个两行两列的数组,在用numpy的mat函数将数组转换为矩阵。
3、接着计算矩阵A的逆矩阵,逆矩阵是通过A.I求得。
4、求出了矩阵A的逆矩阵后,用矩阵B乘以这个逆矩阵就是矩阵的除法了,即为矩阵B除以矩阵A的值。
python将数组转换为矩阵,方法如下:
数组转换矩阵:
A = mat(s[])
Python的定义:
Python是一种面向对象、直译式计算机程序设计语言,Python语法简捷而清晰,具有丰富和强大的类库。
它常被为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写。比如3D游戏中的图形渲染模块,速度要求非常高,就可以用C++重写。
前言
今天拿到一个传感器信号文件,txt格式,有十几行,每行是一组json格式数据,有两个字段(键):'series'和'id',共4个json对象,id从'901'到'904',其中每组的series是是个数组,数组中包含512个json对象,每个json对象含有两个字段:'time'和'value'。
图1 原始文件
解析
MATLAB本身无直接解析json数据的函数,我从MATLAB官网论坛File Exchange上找到两个解析json的第三方函数:json4mat和parse_json。这两个函数均能成功解析json格式数据到MATLAB支持的cell和struct类型数据。
下载地址:;query=jsonterm=json
发现json4mat比parse_json的解析速度更快。
示例
以json4mat为例,
3 %% 解析
4 clear;clc;
5 file = 'C:\Users\Administrator\Desktop\06\zlw\AccData-18-29-43.txt';
6 A = importdata(file);
7 M = [];
8 for i = 1:numel(A)
9 M=[M;json2mat(A{i})];
10 end %方法1,json2mat函数
11
12 % for i = 1:numel(A)
13 % tmp = parse_json(A{i});
14 % M = [M;tmp{1}];
15 % end %方法2,parse_json函数
结果
解析后得到的16*4的cell格式数据,里面每个元素是结构体struct数据。每个结构体有两个字段:series和id。可供MATLAB进行处理。
图2 解析后的数据
一、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']})
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流