使用fread()从MATLAB读取二进制文件数据

使用fread()从MATLAB读取二进制文件数据,matlab,dataset,fread,Matlab,Dataset,Fread,我正在尝试使用位于以下位置的脱机数据集: 但是,我在处理数据(CASIA-HWDB1.0-1.2 gnt文件)时遇到问题。 我使用了位于的示例代码,但它没有编译。因此,我正在使用MATLAB读取数据,但由于显示的图像不合理,数据似乎没有正确读取。下面是我的测试代码,它应该读取并显示一个图像: fid = fopen("HWDB1.1trn_gnt.alz", 'rb', 'n','GB2312'); length= fread(fid, 1, 'uint32'); label= fread(f

我正在尝试使用位于以下位置的脱机数据集:

但是,我在处理数据(CASIA-HWDB1.0-1.2 gnt文件)时遇到问题。 我使用了位于的示例代码,但它没有编译。因此,我正在使用MATLAB读取数据,但由于显示的图像不合理,数据似乎没有正确读取。下面是我的测试代码,它应该读取并显示一个图像:

fid = fopen("HWDB1.1trn_gnt.alz", 'rb', 'n','GB2312');
length= fread(fid, 1, 'uint32');
label= fread(fid, 2, 'int8');
width= fread(fid, 1, 'uint16');
height= fread(fid, 1, 'uint16');
bitmap=fread(fid, width*height, 'uint8');
imgtmp=reshape(bitmap, [height, width]);
imagesc(imgtmp)
fclose(fid)
显然,这不起作用,因为我的宽度是0,而对于一张图片来说,这不可能!imagesc给出了噪声的图像


谢谢

我的问题可能很愚蠢,但你确定你正在阅读的文件是正确的吗?因为从我所读到的,.alz文件是存档文件,如.zip(此外,我无法在您提供的链接上找到您的文件)


当您使用
fread(fid,n,'uint32')
matlab读取带有
uint32
格式和n el

的线向量时,您是否查看了
标签
?它是否具有预期的值?您还应将其重塑为
[宽度、高度]
,然后进行转置。数据似乎按行存储,但MATLAB按列存储。它没有预期值(GB 2312字符映射)。可以肯定的是,行fread(fid,1,'uint32')表示读取4个字节的数据,并将其解释为unit32数据类型的单个数字,对吗?如果是这样,fread(fid,n,'uint32')对任意n的解释是什么?我看到的文档似乎不够清晰。作为校验和,您可以检查
长度
是否等于
(宽度x高)+10
。此外,文档没有指定数据的尾端,因此如果它不能以某种方式工作(在您的计算机中,默认情况下可能是小尾端),请尝试将大于1字节的值读取为大尾端,并查看这些值是否更有意义。您是对的。我获取文件的数据集没有提到任何需要解压缩的内容(即使在我解压缩之后)。谢谢