C语言读取MATLAB生成的数据
问题描述:
给出的数据是由MATLAB解析得到的33*33的数组,格式为.mat文件。
由于要使用C语言对数据进行处理,故先将.mat数据以二进制格式保存,在C中用fread读取
首先,在MATLAB中加载.mat数据,将其保存为二进制格式:
fileID = fopen('img1.bin','w'); // 在当前文件夹下生成一个新的二进制文件‘img1’,并以写模式打开
fwrite(fileID, img1, 'double'); // 将img1中的数据以‘double’型写入打开的img1.bin文件中
fclose(fileID); // 关闭img1.bin文件
以上便是在matlab中的操作,将.mat数据以二进制格式保存在文件夹下
这是我第一次用C代码读取数据,其中费了些周折,先直接看代码吧,有时间再补上我走过的弯路
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char*argv[])
{
int i = 0, j = 0;
int row = 33, col = 33;
int cur = 0;
int a[2] = {9,25};
int b[2] = {9,25};
FILE* fp = NULL;
double** img = NULL;
//double* imgCen = NULL;
if((fp = fopen("data\\img1.bin","rb"))==NULL) //“rb”二进制文件以只读方式打开
{
printf("Can't Open File!\n");
exit(EXIT_FAILURE); // 在stdlib.h中声明
}
// 这里执行完就打开文件了,接下来分配一个内存空间用于存放文件中的数据
// 由于需要在33*33的矩阵中抠出其中间的部分,因此这里给img分配了二维数组空间
img = new double*[row]();
for(i = 0; i < row; i++)
img[i] = new double[col]();
//将fp指向的文件中的数据读取到img中
for(i = 0; i < col; i++)
{
fseek(fp, i*row*sizeof(double), SEEK_SET);
cur = ftell(fp);
fread(img[i],sizeof(double),col,fp);
}
fclose(fp);
fp = NULL;
//imgCen = ReadCenture(img,imgCen,a,b);
//delete imgCen;
//img = NULL;
delete img;
img = NULL;
return 0;
}
写了一个小函数来抠中间的数组的,有时间一定要补