フォルダから画像を順に読み取り処理する方法
25 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
画像が複数枚入っているフォルダを読み込み、順に処理を行って保存したいです。
下記のようなコードを書いているのですが、画像が全く表示されません。
エラーメッセージも出ないため、どこが間違っているのか特定できずにいます。
お力を貸していただけないでしょうか。
im_list=dir("フォルダ名");
file_name={im_list.name};
for i=3:size(file_name,1)
I=imread(file_name{1})
imshow(I)
I2=rgb2gray(I);
BW=I2<75;
imshow(BW)
saveas(fig,file_name{1}.pdf)
end
0 Kommentare
Akzeptierte Antwort
Kojiro Saito
am 14 Jun. 2022
画像が表示されない理由は、size(file_name, 1) が1のため、for文の中が実行されていないためです。
file_name は1行 ✕ (画像の枚数+2)列 の変数になっています。+2は「.」と「..」です。
画像枚数分だけ処理するので、size(file_name, 2)にする必要があります。
また「.」と「..」も取り除いてしまったほうが処理が楽です。
以下のように変更してみてください。
foldername = "フォルダ名";
im_list=dir(foldername);
file_name={im_list.name};
file_name = file_name(~ismember(file_name, {'.', '..'})); %「.」と「..」を除去
for n=1:size(file_name, 2)
I=imread(fullfile(foldername, file_name{n}));
imshow(I)
I2=rgb2gray(I);
BW=I2<75;
imshow(BW)
saveas(gcf, [file_name{n} '.pdf'])
end
4 Kommentare
Kojiro Saito
am 15 Jun. 2022
Bearbeitet: Kojiro Saito
am 15 Jun. 2022
for文での処理内容を1つのpdfにまとめて保存するのは、tiledlayoutやsubplotを使ったやり方でできます。
tiledlayoutの例
for n=1:size(file_name, 2)
I=imread(fullfile(foldername, file_name{n}));
tiledlayout(2, 1); % 2行1列で画像を並べたい場合
%tiledlayout(1, 2); % 1行2列で画像を並べたい場合
nexttile;
imshow(I)
I2=rgb2gray(I);
BW=I2<75;
nexttile;
imshow(BW)
saveas(gcf, [file_name{n} '.pdf'])
%exportgraphics(gcf, [file_name{n} '.pdf'])
end
余白を少なくする場合は、コメントアウトしているexportgraphicsを使ったほうが良いです。
imageDatastoreを使った書き方やimtileで隙間なく横に並べる方法はこんな感じです。お好みで色んな書き方ができます。
imds = imageDatastore('フォルダ名');
while hasdata(imds)
[I, info]=read(imds);
filename = split(info.Filename, filesep);
filename = filename{end};
%imshow(I)
I2=rgb2gray(I);
BW=I2<75;
%imshow(BW)
imt = imtile({I, BW});
figure;imshow(imt)
exportgraphics(gcf, [filename '.pdf'])
%saveas(gcf, [filename '.pdf'])
end
Weitere Antworten (1)
Shunichi Kusano
am 15 Jun. 2022
Bearbeitet: Shunichi Kusano
am 15 Jun. 2022
imageDatastore使うともっと簡単に書けてしまいます。おススメです。
imds = imageDatastore("フォルダ名");
while hasdata(imds)
[I,info] = read(imds);
% 処理を入れる
end
1 Kommentar
Siehe auch
Kategorien
Mehr zu イメージ算術 finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!