如何将C输出文件读入Matlab

时间:2017-02-04 21:07:33

标签: c++ c matlab file io

我创建了一个500 x 500 C的矩阵,如果有人想看到的话大约是1MB - > (http://www.megafileupload.com/8mad/test)。我需要将其读入Matlab,以便我可以使用imagesc对其进行可视化。它应该是一些数学生成的艺术品,我很好奇看到它的样子。

到目前为止,我试过这个:

fid = fopen('test', 'r')
mydata = fread(fid, 'double')

但它并没有真正起作用。

另一方面,如果有人可以建议使用不同的方式来编写文件,那么Matlab非常感谢。

我的文件基本上包含一个500x500元素integer类型的矩阵。

这是我在C:

上保存的方式
if(fwrite(img, sizeof(int), w*h, fp) != w*h)
    printf("File write error.");
    fclose(fp);

2 个答案:

答案 0 :(得分:1)

检查以下内容:

  1. 打开文件Test进行阅读。
  2. int32类型的500x500元素读入矩阵I
  3. 关闭文件。
  4. 转置矩阵 I - 因为C的二维数组是row major,而MATLAB矩阵是列专业,你需要转置一个用C语言编写的矩阵并在MATLAB中读取
  5. 使用imagesc显示图片。
  6. f = fopen('Test', 'r');
    I = fread(f, [500, 500], 'int32');
    fclose(f);
    I = I';
    imagesc(I);
    

    enter image description here

答案 1 :(得分:0)

您正在创建包含整数的二进制文件。我假设这些是32位整数(您必须从C侧检查或使用stdint.hint32_t类型)。

如果您存储了32位整数,您可以像使用正确的类型一样读取您的matlab文件:

mydata = fread(fid, 'int32')

否则matlab会将你的整数值2乘以2映射到双精度数,你可能会得到0或NaN值。

然后你得到一个1D数组,将你的数组重塑为2D数组,看一下reshape函数。例如,请检查此answer