C++讀取mat文件

讀取mat文件配置的環(huán)境

我的計算機環(huán)境是win7 64位系統(tǒng),VS2010,matlab R2010b。

工程配置:
1.C/C++->常規(guī)->附加包含目錄 添加:(兩個都要加)
MATLAB\R2010b\extern\include
MATLAB\R2010b\extern\include\win64
2.鏈接器->常規(guī)->附加庫目錄 添加:(兩個都要加)
MATLAB\R2010b\extern\lib\win64\microsoft
MATLAB\R2010b\extern\lib\win32\microsoft
3.鏈接器->輸入->附加依賴庫 添加:
libmat.lib
libmx.lib
libmex.lib
libeng.lib

由于所安裝的matlab為64位,要調(diào)用其函數(shù),需要將工程轉(zhuǎn)換為X64
4.頂菜單->生成->配置管理器->平臺:X64
5.鏈接器->高級->目標(biāo)計算機:
MachineX64(/MACHINE:X64)

6.計算機環(huán)境變量->path 添加:
E:\DevTools\MATLAB\R2010b\extern\lib\win64\microsoft;
E:\DevTools\MATLAB\R2010b\bin\win64;

讀取文件的基本操作

MATFile *pmatFile = NULL;  
mxArray *pMxArray = NULL;  
  
// 讀取.mat文件(例:mat文件名為"initUrban.mat",其中包含"initA")  
double *initA;  
  
pmatFile = matOpen("initUrban.mat","r");  
pMxArray = matGetVariable(pmatFile, "initA");  
initA = (double*) mxGetData(pMxArray);  
M = mxGetM(pMxArray);  
N = mxGetN(pMxArray);  
//獲取元素,直接以1維向量
initA[M*j+i];

詳細說明參見:
C++讀寫.mat文件

讀取文件的注意事項

  1. matlab中的數(shù)據(jù)都是按列存儲的
    無論在mat文件是幾維的數(shù)據(jù),讀出來都是1維向量,需要自己讀取矩陣的維數(shù),然后按列一個一個讀出來
  2. matlab中的數(shù)據(jù)如果是uint8,讀出來都是錯的
    一般數(shù)據(jù)都是double,但是如果你的數(shù)據(jù)恰好是uint8,那么從C++讀出來一定會非常奇怪,因為uint8是8位(1個字節(jié)),但是讀取的時候是多個字節(jié)。
    解決方案:
    #define BYTE unsigned char BYTE *initA; initA = (BYTE*)mxGetData(pMxArray); (int)initA[0]//最后使用的時候轉(zhuǎn)換成int
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、 matlab對路徑的操作 filesep用于返回當(dāng)前平臺的目錄分隔符,Windows是反斜杠(),Linux...
    李彪_哈工大閱讀 59,541評論 7 28
  • 一個基本的計算機系統(tǒng)由“硬件”和“軟件”組成,一臺Linux設(shè)備,主要的組成如下圖所示: 一般情況下,我們所說的L...
    時待吾閱讀 1,795評論 0 16
  • 閉嘴是最好的選擇,不管是在哪里。所有的痛苦必須自己承受,放心,別人不會替你承受。熬過了就好了,堅持,親愛的自己。
    受傷的雨閱讀 290評論 0 0
  • 懂, 是一種簡簡單單的感動, 懂得你的眼淚, 給你最暖的安慰; 深知你的憔悴, 怪你為何不知疲憊。 懂, 是一種難...
    愛上一葉浮萍閱讀 356評論 6 17
  • 簡悅直播教練恬源閱讀 353評論 3 1

友情鏈接更多精彩內(nèi)容