フォルダから画像を順に読み取り処理する方法

조회 수: 44(최근 30일)
萌香
萌香 2022년 6월 14일
댓글: 萌香 2022년 6월 16일
画像が複数枚入っているフォルダを読み込み、順に処理を行って保存したいです。
下記のようなコードを書いているのですが、画像が全く表示されません。
エラーメッセージも出ないため、どこが間違っているのか特定できずにいます。
お力を貸していただけないでしょうか。
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

채택된 답변

Kojiro Saito
Kojiro Saito 2022년 6월 14일
画像が表示されない理由は、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
萌香
萌香 2022년 6월 16일
ありがとうございます。たくさん質問してしまい申し訳ありません。
とても助かりました。
初心者なのでコメントアウトでのご説明も多くてありがたい限りです。
教えていただいたコードを使ってやってみます。
本当にありがとうございました。

댓글을 달려면 로그인하십시오.

추가 답변(1개)

Shunichi Kusano
Shunichi Kusano 2022년 6월 15일
편집: Shunichi Kusano 2022년 6월 15일
imageDatastore使うともっと簡単に書けてしまいます。おススメです。
imds = imageDatastore("フォルダ名");
while hasdata(imds)
[I,info] = read(imds);
% 処理を入れる
end
  댓글 수: 1
萌香
萌香 2022년 6월 15일
편집: 萌香 2022년 6월 15일
ありがとうございます!
とてもシンプルになりびっくりしています。
使わせていただきます。
すみません、追加で質問なのですが、for文での処理内容を1つのpdfにまとめて保存することは可能ですか?上記だとIとBWを保存するようなイメージです。

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!