matlab --fullfile,fopen,

14 篇文章 0 订阅

 

src_root = 'H:\matlab\Az_Docter_Project\MB';
dst_root = 'H:\matlab\Az_Docter_Project\MB_edge';
lst_set = 'H:\matlab\Az_Docter_Project\MB';
lst_set = [lst_set '.lst'];  % lst_set -> 'H:\matlab\Az_Docter_Project\MB.lst'
index_file = fullfile(lst_set);  % index_file ->  H:\matlab\Az_Docter_Project\MB.lst.lst

%open
fileID = fopen(index_file);  % disp(fileID) -> 3 表示有三个参数吗
im_ids = textscan(fileID, '%s'); 
% disp(im_ids)  -> {31x1 cell} 31表示.lst文件有多少行
im_ids = im_ids{1};
% disp(im_ids) 
%im_ids:
%    'COCO_train2014_000000004823'
%                ...
%    'COCO_train2014_000000014502'
fclose(fileID);  
% close

num_images = length(im_ids);  % 31
for im_id = 1:num_images  

    id = im_ids{im_id};  % 从1到31, 1为例 'COCO_train2014_000000004823'
    id = id(1:end-0);  % 原版是end-4,这是因为要减去'.png', 因为我们的MB.lst已经去掉后缀了这里不需要
    
%     img_path = fullfile(data_root, [id '.jpg']);
%     image = imread(img_path);
   
    gt = imread(fullfile(src_root, [id '.png']));  
    % fullfile加,会自动补充分割符号 -> 'H:\matlab\Az_Docter_Project\MB' + 'COCO_train2014_000000004823.png'
    % 'H:\matlab\Az_Docter_Project\MB\COCO_train2014_000000004823.png'
    
    %计算edge
    gt = (gt > 128);  % 只选取亮度到达一定程度的,在这里都一样
    gt = double(gt);

    [gy, gx] = gradient(gt);  % 计算xy方向的梯度
    temp_edge = gy.*gy + gx.*gx;  % x^2 + y^2
    temp_edge(temp_edge~=0)=1;  % 只要不等于零,置1
    bound = uint8(temp_edge*255);  % x255

    save_path = fullfile(dst_root, [id '_edge.png']);
    % out_root -> 'H:\matlab\Az_Docter_Project\MB'; 
    % id -> 'COCO_train2014_000000004823'
    % '_edge.png'
    imwrite(bound, save_path);

end

index_file = fullfile( [lst_set '.lst'] ); 
% '/home/liuj/dataset/DUTS/DUTS-TR/train.lst'

 

使用方法1
f = fullfile(‘dir1’, ‘dir2’, …, ‘filename’)  
fullfile构成地址字符串;
注意:自动添加斜线

如:输入:f = fullfile(‘C:’,  ’ Applications’,  ’matlab’,  ’fun.m’)
得到:f =‘C:\Applications\matlab\fun.m’

使用方法2
index_file = fullfile([lst_set '.lst']);  
不加逗号,直接连接
% '/home/liuj/dataset/DUTS/DUTS-TR/train.lst'
 

fileID = fopen(index_file);

fopen()是个将数据按指定格式读入到matlab中的函数。
 

matlab中fopen函数的常用调用格式
1)fid = fopen(‘filename’)
2)fid= fopen(‘filename’,’permission’)
其中fid是文件代号filename是要打开的文件名permission是打开方式,默认的打开方式是只读模式。第一种情况时选择默认的打开方式,第二种是认为指定打开方式。
fid是文件的句柄(或者理解为文件的代号),使用fopen()后默认会返回一个文件代号给fid变量,常用的返回值如下:
fid=+N(N是正整数):表示文件打开成功,文件代号是N.
fid=-1 : 表示文件打开不成功。fileID在此次文件关闭前总是有效的。
如果以读方式打开,matlab首先搜索工作目录,其次搜索matlab的其他目录,“permission”是打开方式参数。
打开方式参数由以下字符串确定:
r 读出
w 写入(文件若不存在,自动创建)
a 后续写入(文件若不存在,自动创建)
r+ 读出和写入(文件应已存在)
w+ 重新刷新写入,(文件若不存在,自动创建)
a+ 后续写入(文件若不存在,自动创建))
w 重新写入,但不自动刷新
a 后续写入,但不自动刷新

 

fprintf()是个将数据按指定格式写入到文本文件中的函数。

fprintf函数可以将数据按指定格式写入到指定的文本文件中。
基本格式fprintf(fid, format, A)
fid为文件句柄,从fopen()函数中得到,若缺省,则输出到屏幕; format用来指定数据输出时采用的格式:
%d 整数
%e 实数:科学计算法形式
%f 实数:小数形式
%g 由系统自动选取上述两种格式之一
%s 输出字符串
A是用来存放数据的矩阵。

im_ids = textscan(fileID, '%s');

textscan更适合读入大文件;

textscan可以从文件的任何位置开始读入,而textread 只能从文件开头开始读入;

textscan也可以从上一次textscan结束的位置开始读入,而textread不能;

textscan只返回一个数组(其实应该说是一个细胞矩阵),而textread要返回多个数组(嗯嗯);

textscan提供更多转换读入数据的选择;

textscan提供给用户更多的配置参数。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机视觉-Archer

图像分割没有团队的同学可加群

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值