📄 io_mat.c
字号:
#include <stdarg.h>#include <mat.h>#include <matrix.h>#include "io_mat.h"static void *get_img(int ht, int wd, size_t size);static void *get_spc(int num, size_t size);#ifdef MATLAB5int write_mat_float_image( float **img, /* 2-D image of size img[ht][wd] */ int ht, /* height of image */ int wd, /* width of image */ char *matrix_name, /* name of matlab matrix */ MATFile *fout /* matlab mat file pointer */ ){ mxArray *a; double *dpt; int i,j,status; a = mxCreateDoubleMatrix(wd,ht,mxREAL); dpt = mxGetPr(a); for(i=0; i<ht; i++) for(j=0; j<wd; j++) { dpt[i*wd+j] = img[i][j]; } mxSetName(a,matrix_name); status = matPutArray(fout,a); mxDestroyArray(a); return(status);}int write_mat_float_image_cor( float **img, /* 2-D image of size img[ht][wd] */ int ht, /* height of image */ int wd, /* width of image */ char *matrix_name, /* name of matlab matrix */ MATFile *fout /* matlab mat file pointer */ ){ mxArray *a; double *dpt; int i,j,status; a = mxCreateDoubleMatrix(ht,wd,mxREAL); dpt = mxGetPr(a); for(i=0; i<wd; i++) for(j=0; j<ht; j++) { dpt[i*ht+j] = img[j][i]; } mxSetName(a,matrix_name); status = matPutArray(fout,a); mxDestroyArray(a); return(status);}float **read_mat_float_image(/* Returns pointer to 2-D image of size img[ht][wd] */ int *ht, /* height of image */ int *wd, /* width of image */ char *matrix_name, /* name of matlab matrix */ MATFile *fin /* pointer to file */ ){ mxArray *a; int i,j; double *dpt; float **img; a = matGetArray(fin,matrix_name); if(a!=NULL) { *wd = mxGetM(a); *ht = mxGetN(a); dpt = mxGetPr(a); img = (float **)get_img(*ht,*wd,sizeof(float)); for(i=0; i<*ht; i++) for(j=0; j<*wd; j++) { img[i][j] = dpt[i*(*wd)+j]; } } else img = NULL; mxDestroyArray(a); return(img);}#elseint write_mat_float_image( float **img, /* 2-D image of size img[ht][wd] */ int ht, /* height of image */ int wd, /* width of image */ char *matrix_name, /* name of matlab matrix */ MATFile *fout /* matlab mat file pointer */ ){ Matrix *a; double *dpt; int i,j,status; a = mxCreateFull(wd,ht,REAL); dpt = mxGetPr(a); for(i=0; i<ht; i++) for(j=0; j<wd; j++) { dpt[i*wd+j] = img[i][j]; } mxSetName(a,matrix_name); status = matPutMatrix(fout,a); mxFreeMatrix(a); return(status);}int write_mat_float_image_cor( float **img, /* 2-D image of size img[ht][wd] */ int ht, /* height of image */ int wd, /* width of image */ char *matrix_name, /* name of matlab matrix */ MATFile *fout /* matlab mat file pointer */ ){ Matrix *a; double *dpt; int i,j,status; a = mxCreateFull(ht,wd,REAL); dpt = mxGetPr(a); for(i=0; i<wd; i++) for(j=0; j<ht; j++) { dpt[i*ht+j] = img[j][i]; } mxSetName(a,matrix_name); status = matPutMatrix(fout,a); mxFreeMatrix(a); return(status);}float **read_mat_float_image(/* Returns pointer to 2-D image of size img[ht][wd] */ int *ht, /* height of image */ int *wd, /* width of image */ char *matrix_name, /* name of matlab matrix */ MATFile *fin /* pointer to file */ ){ Matrix *a; int i,j; double *dpt; float **img; a = matGetMatrix(fin,matrix_name); if(a!=NULL) { *wd = mxGetM(a); *ht = mxGetN(a); dpt = mxGetPr(a); img = (float **)get_img(*ht,*wd,sizeof(float)); for(i=0; i<*ht; i++) for(j=0; j<*wd; j++) { img[i][j] = dpt[i*(*wd)+j]; } } else img = NULL; mxFreeMatrix(a); return(img);}#endifstatic void *get_img(int ht, int wd, size_t size){ char *pt; void **img; int i; pt = (char *)get_spc(ht*wd, size ); img = (void **)get_spc(ht, sizeof(void *) ); for(i=0; i<ht; i++) img[i] = (void *)(pt + i*wd*size); return(img);}static void *get_spc(int num, size_t size){ void *pt; if( (pt=(void *)calloc((size_t)num,size)) == NULL ) { fprintf(stderr, "\nERROR: tdf_get_spc ==> calloc() error\n"); exit(-1); } return(pt);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -