我有一些我想要加载和处理的图像。图像的命名如下:image1.jpg
,image2.jpg
,image3.jpg
等。当我处理每个图像时,我想将输出存储在一个数组中。重要的是此数组中的索引对应于图像名称。例如,数组元素5
中的值应与image5.jpg
对应。
问题在于,当我搜索这些文件并加载它们时,它们严格按字母顺序加载,而不是数字加载。所以,因为我有一个hunder图像,所以要加载的前几个是:image1.jpg
,image10.jpg
,image100.jpg
,image101.jpg
,image102.jpg
等等上。因此,数组元素5
将对应image102.jpg
。
我的问题是:如何按文件名中的数字顺序加载文件,而不是默认排序?
以下是获取文件名的代码:
my_dir = dir('C:/MyDir');
image_files = {my_dir(~[my_dir.isdir]).name};
disp(image_files);
给出了输出:
'image1.jpg' 'image10.jpg' 'image100.jpg' 'image101.jpg' 'image102.jpg' .....
答案 0 :(得分:3)
regexp
也完成了工作:
C = regexp(image_files,'image(\d*).jpg','tokens','once');
[~,inds] = sort(str2double([C{:}]))
image_files_sorted = image_files(inds)
答案 1 :(得分:2)
对单元格数组image_files
进行排序:
代码:
image_files = {'image1.jpg' 'image10.jpg' 'image100.jpg' 'image2.jpg' 'image20.jpg'};
[~, ind] = sort(cellfun(@(c) str2num(c(6:end-4)), image_files))
image_files_sorted = image_files(ind);
结果:
image_files_sorted =
'image1.jpg' 'image2.jpg' 'image10.jpg' 'image20.jpg' 'image100.jpg'