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

複数枚の画像(ファイルにある全ての画像)を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

 Akzeptierte Antwort

Kenta
Kenta am 29 Mai 2019

1 Stimme

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 Kommentare

Waon Haraguchi
Waon Haraguchi am 30 Mai 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
Kenta am 30 Mai 2019
im_name{1}は、1.jpgとなっていますか?ループ内は通常通り画像を読んでいるだけなのでとくに大きな差はないように感じます。
[tate, yoko, ~]=size(I);
pixel_num=tate*yoko;
それと、画像サイズとピクセル数なら上のコードで読み込めます。ご確認ください。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Waon Haraguchi
Waon Haraguchi am 30 Mai 2019

0 Stimmen

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

1 Kommentar

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

Melden Sie sich an, um zu kommentieren.

Kategorien

Gefragt:

am 29 Mai 2019

Kommentiert:

am 30 Mai 2019

Community Treasure Hunt

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

Start Hunting!