日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

QT Creator使用matlab库文件读取.mat文件数据

發(fā)布時(shí)間:2025/4/5 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT Creator使用matlab库文件读取.mat文件数据 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

QT Creator使用matlab庫(kù)文件讀取.mat文件數(shù)據(jù)

  • 一、環(huán)境配置
  • 二、關(guān)于編程介紹
  • 三、關(guān)于使用函數(shù)的介紹
    • 1:關(guān)于假設(shè)數(shù)據(jù)類型介紹
    • 2:關(guān)于使用函數(shù)介紹

一、環(huán)境配置


第一步先點(diǎn)開(kāi)我的電腦屬性,然后進(jìn)入如上界面,之后點(diǎn)開(kāi)高級(jí)系統(tǒng)設(shè)置,之后點(diǎn)開(kāi)環(huán)境變量

在之后點(diǎn)開(kāi)Path

找到matlab安裝目錄下面的這幾個(gè)文件添加進(jìn)去
再之后配置QT,在pro文件后面添加如下幾行代碼

INCLUDEPATH += D:\MATLAB\matlab\extern\include\ LIBS += -LD:\MATLAB\matlab\extern\lib\win64\microsoft\ -llibeng LIBS += -LD:\MATLAB\matlab\extern\lib\win64\microsoft\ -llibmx LIBS += -LD:\MATLAB\matlab\extern\lib\win64\microsoft\ -llibmat

然后在需要使用的頭文件部分添加如下的頭文件

#include< stdio.h> #include< stdlib.h> #include"mat.h"#include"matrix.h"

這里有幾個(gè)需要一定要注意的,首先第一個(gè)這個(gè)
我在網(wǎng)上看到按照這樣的添加lib文件,但是我沒(méi)成功
還有如下的這樣把-llibXXX放在開(kāi)頭,這樣的我也試過(guò)我沒(méi)有成功
還有最重要要的是這個(gè)三個(gè)lib庫(kù)加入的順序不能錯(cuò)了,一定要按照我的先-llibeng,之后再-llibmx,最后在-llibmat這樣子,不然之后寫程序時(shí)候,會(huì)有些函數(shù)無(wú)法使用,雖然沒(méi)找到原因,暫時(shí)先這樣解決了問(wèn)題,如果有人知道原因歡迎交流下。

二、關(guān)于編程介紹

//打開(kāi)選擇文件對(duì)話框,獲取文件路徑 QString File_Path = QFileDialog::getOpenFileName(this, "open","../","source(*.cpp *.h *.DAT *.mat);;Text(*.txt);;all(*.*)"); QByteArray ba = File_Path.toLatin1(); const char *rootFile = ba.data(); MATFile *pmatFile = matOpen(rootFile, "r"); if (pmatFile == NULL){QMessageBox::warning(NULL,tr("文件打開(kāi)失敗"),tr("mat文件打開(kāi)失敗"),QMessageBox::Yes);return;}

這里我是先打開(kāi)選擇文件的對(duì)話框,然后找到需要讀取的文件路徑,轉(zhuǎn)化為函數(shù)需要的數(shù)據(jù)格式,通過(guò)下面函數(shù)把這個(gè)mat文件打開(kāi)。
matOpen(rootFile, “r”);

// 獲取文件中變量var; mxArray* Array1 = matGetVariable(pmatFile, "RBR"); //先與變量綁定 mxArray* pF = mxGetField(Array1,0,"data"); //再獲取其中域的數(shù)據(jù) matClose(pmatFile); // 獲取矩陣數(shù)據(jù)行數(shù); int row = mxGetM(pF); qDebug() << row<<endl; // 獲取矩陣數(shù)據(jù)列數(shù); int column = mxGetN(pF); qDebug() << column <<endl;

這里要對(duì)變量跟域有個(gè)概念
比如我這個(gè)數(shù)據(jù)里面只有一個(gè)變量,那么我首先與變量綁定
mxArray* Array1 = matGetVariable(pmatFile, “RBR”);
我這個(gè)變量打開(kāi)又有這么多域,那么我想要data這個(gè)域里面的數(shù)據(jù),通過(guò)這個(gè)函數(shù),再綁定這個(gè)變量里面的域的數(shù)據(jù)
mxArray* pF = mxGetField(Array1,0,“data”); //再獲取其中域的數(shù)據(jù)
之后就可以通過(guò)這個(gè)函數(shù)獲取其中域中的數(shù)據(jù)。

// 獲取數(shù)據(jù); double *Data = (double*)mxGetData(pF);

之后最主要是通過(guò)下面的一個(gè)for循環(huán)把數(shù)據(jù)取出來(lái)

for(int i=3*row;i<4*row;i++) //獲取第四列的所有數(shù)據(jù) {depth.append(Data[i]); //添加數(shù)據(jù) } qDebug() <<"深度數(shù)據(jù)添加完畢"<<endl; for(int i=9*row;i<10*row;i++) {c_speed.append(Data[i]); //添加聲速數(shù)據(jù) }qDebug() <<"聲速數(shù)據(jù)添加完畢"<<endl;

三、關(guān)于使用函數(shù)的介紹

1:關(guān)于假設(shè)數(shù)據(jù)類型介紹

NameValue
A4x5 double
B2x4x3 double
C1x1 struct

A代表是一個(gè)4x5的矩陣
B代表是一個(gè)2x4x3的矩陣
C代表是一個(gè)結(jié)構(gòu)體
里面有域與值

Fieldvalue
A_fileld400x50 double
B_fileld200x50 double

域A_fileld是一個(gè)400x50的一個(gè)矩陣
域B_fileld是一個(gè)200x50的一個(gè)矩陣

2:關(guān)于使用函數(shù)介紹

a. matOpen:打開(kāi).mat文件。如果想打開(kāi)文件“data.mat”,則MATFile pMF = matOpen(“data.mat”,”r”);

b. matClose:關(guān)閉*.mat文件。如果想關(guān)閉文件“data.mat”,則matClose(pMF);

c. matGetVariable:獲取變量,對(duì)應(yīng)于表1中的“Name”。如果想獲取變量“A”,則mxArray* pA = matGetVariable(pMF,”A”);

d. matGetPr:獲取變量的實(shí)部數(shù)據(jù)。如果想獲取變量“A”的實(shí)部,則double* pAReal = mxGetPr(pA);

e. mxGetNumberOfDimensions:返回變量的維度。如果想獲取變量“A的維度,則int D = mxGetNumberOfDimensions(pA)

f. mxGetM:獲取變量的行數(shù)。如果想獲取變量“mat3D”的行數(shù),則 int M = mxGetM(pA);此時(shí)M = 2;對(duì)于變量“mat2D”,M = 4

g. mxGetN:獲取變量在mxArray中的列數(shù)。

h. mxGetField:獲取結(jié)構(gòu)體中的域,對(duì)應(yīng)于表2中的“Field”。假設(shè)pS已經(jīng)指向變量“C”,如果想獲取域“A_fileld ”,則mxArray* pF = mxGetField(pS,0,”A_fileld ”);

總結(jié)

以上是生活随笔為你收集整理的QT Creator使用matlab库文件读取.mat文件数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。