2010-06-23 46 views
1

我在Matlab中有一个二进制图像,我需要在C程序中的二进制数组(0和1), 如何导入它?从matlab导入一个二进制图像到“C”程序

我可以将Matlab中的二进制图像保存为“.mat”,但我不知道如何读取mat文件中的C。 另外我想也许我可以将二进制图像保存为“.bin”这是可读的“C”,但我不知道如何将图像保存为“.bin”。

任何帮助将不胜感激。

回答

3

您还可以将数据写入到一个二进制文件,这将是约小两倍,然后文本。

img=rand(10)>.5; %# an array from @Amro's answer 
fid = fopen('test.bin','w'); 
fwrite(fid,img,'int8') 
fclose(fid); 

然后我相信你可以在没有问题的情况下阅读它。记住,MATLAB将按列而不是按行来写数据 - 第一列,然后是第二列等。如果你想按行读它在C,只写前转数组:

fwrite(fid,img','int8') %# notice ' symbol after img 
2

首先,使用搜索引擎检查网络。首先搜索的地方当然是Mathworks,在那里你可以找到像this这样的文档。第二步,因为从头开始写一个转换器看起来很复杂,那就是搜索你的需求是否已经是别人需要的。像this这样的链接可能很有用,但是有一个MATLAB本身的要求(与其中的一个库,我想是MAT-file接口库连接)。然而,我相信这是更简单的事情。

下一个简单的解决方案是使用this与我们知道我们可以读取的格式,如果输入数组是类的逻辑,imwrite假定数据是二进制图像,并将其与的比特深度写入文件1,如果格式允许。 BMP,PNG或TIFF格式接受二进制图像作为输入数组。

BMP图像不易被自定义例程处理;对于PNG图像,您可以使用png库,对于TIFF,我不记得了,但是您可以搜索或选择其他选项。

Here解释其他保存数据的方法;一个简单的ascii文件也可以很容易地被自定义的C例程分析。

2
>> img=rand(10)>.5 
img = 
    1  0  1  1  0  0  1  1  0  0 
    1  1  0  0  0  1  0  0  1  0 
    0  1  1  0  1  1  1  1  1  1 
    1  0  1  0  1  0  1  0  1  1 
    1  1  1  0  0  0  1  1  1  1 
    0  0  1  1  0  0  1  0  0  0 
    0  0  1  1  0  1  1  0  1  1 
    1  1  0  0  1  0  0  0  1  0 
    1  1  1  1  1  1  0  1  0  0 
    1  1  0  0  1  0  0  0  1  0 

>> dlmwrite('file.dat', img, 'delimiter',' ') 
0

如果你需要从MATLAB导出阵列数据并将其导入到C程序中,一个容易的选择(假设数组是不是巨大的)是使用纯文本文件作为中间。从Matlab将数组写入字符串到文本文件中,每个元素用逗号分隔(例如,1,0,0,1,0,1,1,etc)。将其保存为常规的ASCII文本文件。现在,您可以使用fopen以C打开文件,每次使用fgetc以一个字符读入,然后重建阵列。

例如,将C部分可能看起来像:

FILE* fp; 
char inp[3]; 
int array[PLENTY_OF_ROOM], index=0; 
fp = fopen("exported_data.txt", "r"); 
while (fgets(inp, 3, fp) != NULL) { 
    if ((inp[0] == '0' || inp[0] == '1') && inp[1] == ',') 
     array[index++] = inp[0] - '0'; 
    else { 
     fprintf(stderr, "Error: bad format\n"); 
     exit(1); 
    } 
} 
+0

我张贴作品行向量的代码,但它应该是很容易的二维矩阵适应(刚加入支持用于检测和处理在行之间出现的换行符)。 – bta 2010-06-23 16:27:21

0

在某些平台上(如Windows),您必须指定“二进制”打开文件时,否则读取/写入的字节可以被视为特殊字符,并且不能被读/如预期写入文件:

FILE* fin,fout; 
... 
fin = fopen("file1.bin", "rb"); // the 'b' indicates "binary" 
fout = fopen("file1.bin", "wb"); // the 'b' indicates "binary"