matlab 中num2str函数的使用

参考:
https://zhidao.baidu.com/question/431413920.html

问题描述

先前使用num2str函数只是使用了该函数最常用的功能:将数字转换为字符串,但其实该函数还有额外格式上的功能,今天使用图像批处理的时候发现一对图像的文件名有格式上的问题需要注意。
比如现在我有一个文件夹,下面有2种图像,我这里是MS和Pan,其中存在一一对应的关系。MS文件名格式为original_01.tif,……,original_id,tif;Pan文件名格式为pan_01.tif,……,pan_id.tif,我们注意到id即使是1-9之间也占了2个字符的位置。如果我们使用如下所示的代码片段遍历整个文件夹,会发现1-9编号的图像不会被访问到。

files_path = './images/';          % 图像文件夹路径
img_path_list = dir(strcat(files_path,'*.tif'));

img_num  = length(img_path_list)/2; % Pan和对应多光谱是一对

for  index = 1:img_num
        % 读取Pan和对应的多光谱图像
        gt_name = img_path_list(index).name;% 获取图像名,只得到了多光谱图像
        pan_name = ['pan_',num2str(index),'.tif'];
        disp(gt_name);   %测试
        disp(pan_name);
        disp('=============');
end

结果如下图所示,我们会发现红色框里面的内容与我们所想要的pan_01.tif格式不一致。
matlab 中num2str函数的使用_第1张图片

解决方法

首先介绍一下num2str函数的使用方法,然后我们就知道该如何解决上面的问题了。调用形式如下:
1)str = num2str(A) ;
将数字A转换成char类型,值得注意的是A也可以是数字类型的数组。

 a =[1,2,3,4];
 y = num2str(a);
 whos 

2)str = num2str(A, precision)
A: 数值类型的数组或者是单个的数值
precision:转换成字符穿保留的数字位数

a = [1.222222,2.11111111,3.4444444];
y=num2str(a,2)
# 结果
y =

    '1.2      2.1      3.4'

3)str = num2str(A, format)
A: 数值类型的数组或者是单个的数值
format:指定数字转换为字符串的格式,通常’%11.4g’是默认的。
也可以指定转换为几位的字符串,不足用0填充,如%02d
%03d等

a = 1;
y1 = num2str(a,'%02d'); % '01'
y2 = num2str(a,'%03d'); % '001'

看到该函数的第3种调用形式,我们就应该知道如何解决刚开始说的格式不一致的问题了。

files_path = './images/';          % 图像文件夹路径
img_path_list = dir(strcat(files_path,'*.tif'));

img_num  = length(img_path_list)/2; % Pan和对应多光谱是一对

for  index = 1:img_num
        % 读取Pan和对应的多光谱图像
        gt_name = img_path_list(index).name;% 获取图像名,只得到了多光谱图像
        pan_name = ['pan_',num2str(index,'%02d'),'.tif'];
        disp(gt_name);   %测试
        disp(pan_name);
        disp('=============');
end

你可能感兴趣的:(matlab)