MATLAB Answers

0

複数枚の画像をfor文を使って処理したいです

Asked by Waon Haraguchi on 29 May 2019
Latest activity Commented on by Kenta Itakura on 30 May 2019
複数枚の画像(ファイルにある全ての画像)をfor文を使って処理がしたいです.
以下のような処理をしましたが,画像ファイルを指定できていないので,エラーが出ます.
for n = 1:100
I = imshow('n.jpg');
[nrows,ncols] = size(get(I,'CData'));
xdata = get(I,'XData');
xlength = xdata(1,2)
ylength = ydata(1,2)
pixcelsize =xlength *ylength
end

  0 Comments

Sign in to comment.

2 Answers

Answer by Kenta Itakura on 29 May 2019
 Accepted Answer

clear;clc
im_list= dir('*.jpg');
list_tbl=struct2table(im_list);
im_name=list_tbl.name;
for i=1:size(im_name,1)
I=imread(im_name{i});
%以下、操作を加える
end
このように、~.jpgというファイルをリスト化して、それを1つずつ読み取るとよいと思います。
imds = imageDatastore(pwd);
for i=1:numel(imds.Files)
I=read(imds);
%以下操作を加える
end
また、jpgファイルをイメージデータストアに格納して、1から読んでいくのもよいかもしれません。
ちなみに、上のfor文内での操作は、何を意図されていますでしょうか。

  2 Comments

Waon Haraguchi on 30 May 2019
お早い回答ありがとうございます.
for文内では読み込んだ画像の縦横の長さと全体のピクセル数を計算しています.
for文にいれずに下記のような処理を行うと,画像1枚の縦横の長さと全体のピクセル数は出すことができています.
I = imshow('1.jpg');
[nrows,ncols] = size(get(I,'CData'));
xdata = get(I,'XData');
ydata = get(I,'YData');
xlength = xdata(1,2)
ylength = ydata(1,2)
pixcelsize =xlength *ylength
しかし,1つ目に教えていただいた方を入力すると,エラーとして「get 無効なハンドル」,「 [nrows,ncols] = size(get(I,'CData'));」と出ています.何にかいい方法があれば教えていただきたいです.
宜しくお願いいたします.
Kenta Itakura on 30 May 2019
im_name{1}は、1.jpgとなっていますか?ループ内は通常通り画像を読んでいるだけなのでとくに大きな差はないように感じます。
[tate, yoko, ~]=size(I);
pixel_num=tate*yoko;
それと、画像サイズとピクセル数なら上のコードで読み込めます。ご確認ください。

Sign in to comment.


Answer by Waon Haraguchi on 30 May 2019

1.jpgになっていませんでした.
しかし,自分で作ったコードではやはり同じエラーが出てしまい,教えていただいた画像サイズとピクセル数のコードで結果が出ました.
ありがとうございます.

  1 Comment

Kenta Itakura on 30 May 2019
はい、お役にたてたようでうれしいです。また、何かございましたらご連絡ください。

Sign in to comment.