C++.mat 파일 을 읽 고 쓰 는 방법

3295 단어 읽 기와 쓰기mat
최근 C++프로그램 을 작성 하 는 과정 에서 matlab 에서 생 성 된.mat 파일 을 사용 해 야 하기 때문에 기본 적 인 사용 방법 을 찾 았 습 니 다. 
제 컴퓨터 환경 은 win 7 64 비트 시스템,VS 2010,matlab R2010b 입 니 다. 
1.프로젝트 설정:  1.VC++디 렉 터 리->디 렉 터 리 추가 포함:  MATLAB\R2010b\extern\include  MATLAB\R2010b\extern\include\win64   ->라 이브 러 리 추가:    MATLAB\R2010b\extern\lib\win64\microsoft    MATLAB\R2010b\extern\lib\win32\microsoft  2.C/C++->일반->추가 포함 디 렉 터 리 추가:    MATLAB\R2010b\extern\include    MATLAB\R2010b\extern\include\win64  3.링크 기->입력->추가 의존 라 이브 러 리 추가:  libmat.lib  libmx.lib  libmex.lib  libeng.lib 
설 치 된 matlab 가 64 비트 이기 때문에 함 수 를 호출 하려 면 프로젝트 를 X64 로 변환 해 야 합 니 다.  4.상단 메뉴->생 성->설정 관리자->플랫폼:X64  5.링크 기->고급->대상 컴퓨터:  MachineX64(/MACHINE:X64) 
6.컴퓨터 환경 변수->path 추가:  E:\DevTools\MATLAB\R2010b\extern\lib\win64\microsoft;  E:\DevTools\MATLAB\R2010b\bin\win64; 
2.사용 하 는 기본 읽 기 쓰기 mat 파일 코드 예제: 
우선 헤더 파일 을 포함해 야 합 니 다: 

#include <mat.h> 

[cpp] view plaincopy 

    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);   
    Matrix<double> A(M,N);   
    for (int i=0; i<M; i++)   
        for (int j=0; j<N; j++)   
            A[i][j] = initA[M*j+i];   

    matClose(pmatFile);   
    mxFree(initA);   

    // .mat    
    double *outA = new double[M*N];   
        for (int i=0; i<M; i++)   
            for (int j=0; j<N; j++)   
                outA[M*j+i] = A[i][j];   
    pmatFile = matOpen("A.mat","w");   
    mxSetData(pMxArray, outA);   
    matPutVariable(pmatFile, "A", pMxArray);   
    matClose(pmatFile);   


3.절차 설명 
1.matOpen 함수 로 mat 파일 열기 
MATFile *matOpen(const char *filename,const char *mode) 
mode:  r:읽 기 전용 으로 열기  u:업데이트 모드,읽 고 쓸 수 있 지만 열 데이터 파일 이 존재 하지 않 으 면 새 파일 을 만 들 지 않 습 니 다.  w:기록 방식 으로 열 면 입력 과 같이 쓸 수 있 습 니 다.열 데이터 파일 이 존재 하지 않 으 면 새 파일 을 만 듭 니 다. 
2.matGetVariable 함 수 를 사용 하여 mat 파일 의 변 수 를 읽 습 니 다. 
mxArray * matGetVariable(MATFile * pMF, const char * name); 
이름 이 name 인 변 수 를 읽 고 데이터 배열 지침 을 되 돌려 줍 니 다. 
3.mxGetData 함 수 를 사용 하여 데이터 배열 의 데 이 터 를 가 져 옵 니 다. 
void *mxGetData(const mxArray *pa ); 
돌아 올 때 강제 형식 변환 을 사용 해 야 합 니 다. 
4.mxGetM 과 mxGetN 함 수 를 사용 하여 데이터 배열 행렬 의 위 치 를 가 져 옵 니 다. 
size_t mxGetM(const mxArray *pa); 
size_t mxGetN(const mxArray *pa); 
5.mxSetData 함 수 를 사용 하여 변 수 를 데이터 배열 에 저장 합 니 다. 
void mxSetData( mxArray *pa, void  *newdata ); 
6.matPutVariable 함 수 를 사용 하여 데이터 배열 을 mat 파일 에 저장 합 니 다. 
int matPutVariable(MATFile * pMF, const char * name, const mxArray * pA); 
저장 성공 반환 0,저장 오류 반환 0 이 아 닙 니 다. 
7.malab 에서 행렬 의 저장 소 는 열 에 따라 저장 되 기 때문에 c 와 다 르 기 때문에 mat 파일 에서 얻 은 행렬 은 다시 배열 해 야 합 니 다.mat 파일 을 만 들 때 도 마찬가지 로 주의해 야 합 니 다.

좋은 웹페이지 즐겨찾기