【发布时间】:2020-06-09 19:34:19
【问题描述】:
我正在尝试使用位于以下位置的离线数据集: http://www.nlpr.ia.ac.cn/databases/handwriting/Offline_database.html.
但是,我无法处理数据(CASIA-HWDB1.0-1.2 gnt 文件)。 我使用了位于http://www.nlpr.ia.ac.cn/databases/Download/GntRead.cpp.pdf 的示例代码,但这无法编译。结果,我使用 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 给出了一张噪声图片。
谢谢
【问题讨论】:
-
你看
label了吗?它有预期值吗? -
你也应该重塑为
[width,height],然后转置。数据似乎按行存储,但 MATLAB 按列存储。 -
它没有预期值(GB 2312 字符映射表)。可以肯定的是, fread(fid, 1, 'uint32') 行表示读取 4 个字节的数据并将其解释为 unit32 数据类型的单个数字,对吗?如果是这种情况,对于任意 n,fread(fid, n, 'uint32') 的解释是什么?我看到的文档似乎不够清楚。
-
作为校验和,您可以检查
length是否等于(widthxheight)+10。此外,该文档没有指定数据的字节序,因此如果它不能以一种方式工作(默认情况下可能是您的机器的小字节序),请尝试将大于 1 字节的值读取为大字节序并查看值是否更有意义。