for loopで計算処理を連番のフォルダに対して適応したい.連番のフォルダの変更方法
Show older comments
1~100の連番のフォルダに格納された1~20のjpgの連番のファイルを結合させようとしています。
現在開いているフォルダに対しては連番の画像の連結をすることができたのですが、1のフォルダから次の連番のフォルダを開いて、for loopで上記の処理をする事ができません。ご教授いただけないでしょうか。
for i=1:100
%以下画像結合の計算処理
jpegFiles = dir('*.jpg');
numfiles = length(jpegFiles);
mydata = cell(1, 20);
for k = 1:20
mydata{k} = imread(jpegFiles(k).name,"jpg");
end
fig=imtile(mydata)
fig2=imresize(fig,[200 250])
imshow(fig2)
imwrite(fig2,['保存先のパス',num2str(k),'.jpg']);
end
Accepted Answer
More Answers (1)
Atsushi Ueno
on 29 Dec 2022
Edited: Atsushi Ueno
on 29 Dec 2022
(追記):2000ファイルが100個のフォルダに20枚ずつ格納されている事と、各フォルダの画像20枚ずつをタイル状に並べた画像を保存する必要がある事に気付き、その点修正しました。
selPath = uigetdir(pwd); % フォルダを選択
allFiles = dir(fullfile(selPath,'*','*.jpg')); % 選択フォルダ内のフォルダに格納されたjpgファイルが対象
mygroups = groupsummary(struct2table(allFiles),'folder'); % フォルダ数とJPEGファイル数を得る
for i = 1:size(mygroups,1) % フォルダの数だけ繰り返す
%以下画像結合の計算処理
jpegFiles = dir(fullfile(mygroups.folder{i},'*.jpg')); % 各フォルダ内のJPEGファイル情報を取得し直す
numfiles = mygroups.GroupCount(i); % length(jpegFiles); どっちも同じ
mydata = cell(1,mygroups.GroupCount(i));
for k = 1:numfiles % ファイルの数だけ繰り返す
mydata{k} = imread(fullfile(jpegFiles(k).folder,jpegFiles(k).name));
end
fig = imtile(mydata); % タイル状にサムネイルを表示
fig2 = imresize(fig,[200 250]);
imshow(fig2);
imwrite(fig2,['保存先のパス',num2str(k),'.jpg']);
end
1 Comment
Atsushi Ueno
on 29 Dec 2022
パス上のフォルダーとサブフォルダーを再帰的に検索するには、パス名にワイルドカードを使用します。たとえば、dir */*.txt は現在のフォルダーの 1 つ下のフォルダーにある、拡張子が txt のファイルをすべてリストし、dir **/*.txt は現在のフォルダーまたはそれより下のフォルダーにある、拡張子が txt のファイルをすべてリストします。** ワイルドカードの次の文字は、ファイル区切りでなければなりません。
Categories
Find more on イメージ in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!