How to read images sequentially from a folder?
6 ビュー (過去 30 日間)
古いコメントを表示
sourcefolder = 'E:\images';
filepattern = fullfile(sourcefolder, '*.png');
outputfolder = 'E:\images2';
srcFiles = dir(filepattern);
numImages = length(srcFiles);
for k = 1 : numImages
inputfilename = fullfile(sourcefolder, srcFiles(k).name);
outputfilename = fullfile(outputfolder, sprintf('histo_%d.png',k));
.....
....
....
end
My folder containing 1400 images. Whenever I am reading images using the above code and after performing any image processing its not happening sequentially. How can read images by one by one maintaing the sequence and can write to them by maintaining the same order.
2 件のコメント
採用された回答
Stephen23
2022 年 7 月 5 日
編集済み: Stephen23
2022 年 7 月 6 日
You can download the file NATSORTFILES by clicking the big blue download button here:
then unzip the file onto the MATLAB search path (e.g. into the current directory), and then use it like this:
srcFiles = dir(filepattern);
srcFiles = natsortfiles(srcFiles);
その他の回答 (2 件)
Pooja Kumari
2022 年 7 月 5 日
編集済み: Pooja Kumari
2022 年 7 月 5 日
Dear Zara Khan,
It is my understanding that you want to access the images present in the folder sequentially and after performing some operations, you want to store the output image in ‘output filename’.
But the issue you were facing is that when you are reading images using the provided code and after getting the input file name and performing some image processing, you were not getting the output sequentially is because the files stored in input file name is not sequential.
You can refer to the updated code given below:
sourcefolder = 'E:\images'; %path of your source folder
filepattern = (fullfile(sourcefolder, '*.png'));
srcFiles = dir(filepattern);
numImages = length(srcFiles);
outputfolder = 'E:\images2';
for i= 1: numel(srcFiles)
I =(imread(strcat(sourcefolder,'/',srcFiles(i).name)));
outputfilename = fullfile(outputfolder, sprintf('histo_%d.png',i));
.....
....
...
end
Please find attached a reference code for the above issue you were facing:
% I have 50 images named numerically '15_1_s', '15_2_s', ... '15_50_s' but
% the order in which these files are stored is shown in the image below:
path = '/MATLAB Drive/CV_Assignment2/dd/dd';
folder = (path);
files = dir(fullfile(folder,'*.jpg'));
nfiles = length((files));
mkdir(['Outputfolder',sprintf('%d',outputfolder)]); % similar to outputfolder.
for i= 1: numel(files)
I =(imread(strcat(path,'/',files(i).name)));
imwrite(imgx,strcat(path_output,'/',files(i).name));
%output will be stored sequentially .
end
For more information on how to sort files stored in a directory , you can refer to the below link:
You can refer to this file, if you want to sort the input files naturally:
Sincerely,
Pooja Kumari
Chunru
2022 年 7 月 5 日
編集済み: Chunru
2022 年 7 月 5 日
% create some files
system('touch a.png');
system('touch c.txt');
pause(1) % make sure b is newer in datenum
system('touch b.txt');
pause(.5)
% get the files
f = dir('*.*');
{f.name}
% sort according to name
[~, idx] = sort({f.name})
fname = {f(idx).name}
% sort according to datetime
[~, idx] = sort([f.datenum])
fname = {f(idx).name}
6 件のコメント
参考
カテゴリ
Help Center および File Exchange で File Operations についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!