matlab textscan读结构化.txt文件

这篇博客介绍了如何在MATLAB中使用textscan函数读取COCO数据集的ID映射文件,将sampleID映射到对应的imagename,以便进行图像读取操作。代码示例展示了如何解析文件并提取所需信息,最终得到sampleID、imageID和imagename的大小,并展示了一个具体的例子。

要用 matlab 读之前处理的 COCO 的 ID map[1],将 sample ID 映射去 image name,用来读图片。ID map 文件每一行的形如:

0 9 000000000009.jpg

空格间开,第一列是 sample ID,第二列是原本的 image ID,即第三列 image name 中的 ID。

textscan[2] 函数,其中格式控制符见 [3]。

Code

id_map_file = fullfile("data/COCO", "id-map.COCO.txt");

f = fopen(id_map_file, "r");
% <sample ID> <image ID> <image name>
id_map = textscan(f, "%d %d %s");
fclose(f);

% 读出的 cell 中对应三列
fprintf("cell shape:"), disp(size(id_map));  % (1, 3)
sid = id_map{1};
image_id = id_map{2};
image_name = id_map{3};

fprintf("id:"), disp(size(sid));  % (123287, 1)
fprintf("image id:"), disp(size(image_id));  % (123287, 1)
fprintf("image name:"), disp(size(image_name));  % (123287, 1)

% sid、image_id 是 int,用 `(i)` 索引
% image_name 是 str,用 `{i}` 索引
fprintf("id: %d, image id: %d, image name: %s\n", sid(1), image_id(1), image_name{1});
% 输出:id: 0, image id: 9, image name: 000000000009.jpg

References

  1. MS COCO 2017数据集预处理
  2. textscan
  3. formatSpec — Format of the data fields
原创matlab读取txt中文文本的解决方案-程序.rar matlab对中文的支持一直以来都是个不小的问题,尤其在读取文本方面。一般出的中文文本都是乱码,网上找了半天没找到答案,自己研究了一下,在快要绝望的时候终于有了结果~ 呵呵     这个问题是在本论坛中的GUI教学视频第5课中提到的,学生的成绩单必须要转换成英文 数字才能正常入,我用的是中文系统,用fopen试了一下,结果出的中文是'???'样的乱码。不多废话,还是用本课视频的例子,为了证明读取中文的有效性,我把源程序的思路做了一下改动,界面中不做中文string的设置,全部由程序给出,解决方案如下 编程环境:matlab7.1;Windows XP professional SP2 更改后的代码 function matlab_GUI_4_OpeningFcn fdata = importdata    % 导入文本数据 ftextdatasize = size;   % 求文本类数据长度 fdatasize = size    % 求数据长度 counter = 1; while counter<ftextdatasize  % ftextdatasize 为 fdata.textdata 行数     % 从第二行开始取(从第二行起才为人名),第一行为标识     xingming = fdata.textdata;     counter = counter 1; end counter = 1; while counter<fdatasize 1     chengji = fdata.data;     counter = counter 1;    end set; handles.chengji = chengji; % 设成了全局变量,留着扩展用,其实只用局部变量也成 handles.kemu = fdata.textdata); set); set); set); set); 复制代码function listbox1_Callback value = get; % value为行向量,选择前2项即为[1 2]; set)); 复制代码结果如图 未命名.JPG 感谢管理员为我们做的如此精彩的视频,附件中为数据及代码(包括本例代码以及GUI视频教程第5课程序代码)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值