我在Matlab中有一个二进制图像,我需要在C程序中的二进制数组(0和1), 如何导入它?从matlab导入一个二进制图像到“C”程序
我可以将Matlab中的二进制图像保存为“.mat”,但我不知道如何读取mat文件中的C。 另外我想也许我可以将二进制图像保存为“.bin”这是可读的“C”,但我不知道如何将图像保存为“.bin”。
任何帮助将不胜感激。
我在Matlab中有一个二进制图像,我需要在C程序中的二进制数组(0和1), 如何导入它?从matlab导入一个二进制图像到“C”程序
我可以将Matlab中的二进制图像保存为“.mat”,但我不知道如何读取mat文件中的C。 另外我想也许我可以将二进制图像保存为“.bin”这是可读的“C”,但我不知道如何将图像保存为“.bin”。
任何帮助将不胜感激。
您还可以将数据写入到一个二进制文件,这将是约小两倍,然后文本。
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
首先,使用搜索引擎检查网络。首先搜索的地方当然是Mathworks,在那里你可以找到像this这样的文档。第二步,因为从头开始写一个转换器看起来很复杂,那就是搜索你的需求是否已经是别人需要的。像this这样的链接可能很有用,但是有一个MATLAB本身的要求(与其中的一个库,我想是MAT-file接口库连接)。然而,我相信这是更简单的事情。
下一个简单的解决方案是使用this与我们知道我们可以读取的格式,如果输入数组是类的逻辑,imwrite假定数据是二进制图像,并将其与的比特深度写入文件1,如果格式允许。 BMP,PNG或TIFF格式接受二进制图像作为输入数组。
BMP图像不易被自定义例程处理;对于PNG图像,您可以使用png库,对于TIFF,我不记得了,但是您可以搜索或选择其他选项。
Here解释其他保存数据的方法;一个简单的ascii文件也可以很容易地被自定义的C例程分析。
>> 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',' ')
如果你需要从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);
}
}
在某些平台上(如Windows),您必须指定“二进制”打开文件时,否则读取/写入的字节可以被视为特殊字符,并且不能被读/如预期写入文件:
FILE* fin,fout;
...
fin = fopen("file1.bin", "rb"); // the 'b' indicates "binary"
fout = fopen("file1.bin", "wb"); // the 'b' indicates "binary"
我张贴作品行向量的代码,但它应该是很容易的二维矩阵适应(刚加入支持用于检测和处理在行之间出现的换行符)。 – bta 2010-06-23 16:27:21