一、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??晒㎝ATLAB進行處理。
圖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']})
分享名稱:mat函數python3 mat函數用法
鏈接URL:http://vcdvsql.cn/article44/doodjee.html
成都網站建設公司_創新互聯,為您提供做網站、小程序開發、網站營銷、面包屑導航、品牌網站建設、網站策劃
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯