for分を使用して複数の画像を処理する方法について
20 ビュー (過去 30 日間)
古いコメントを表示
Yasutake Haramiishi
2021 年 2 月 22 日
コメント済み: Yasutake Haramiishi
2021 年 2 月 23 日
こんにちは。
画像を射影変換するところなのですが、1つのファイルから複数の画像を読み取り、処理しようと試みました。
以下のコードで実行したのですが、2枚しか処理されません。手動で一枚だけ読み取れば射影変換のところは動くのですが、、、
やりたいこととしては、下記コードのI=imread(b{i});で読み取った画像全てを射影変換し、ファイル(face)に全て格納したいです。
何かアドバイス等いただけると幸いです。よろしくお願いいたします。
clc;clear;
rootfolder = fullfile('C:\Users\*** Lab\Desktop\MATLAB\フリー素材');
%%
j = dir('*.jpg');
a=struct2table(j);
b=a.name;
%%
for i=1:size(b,1)
I=imread(b{i});
mkdir('face'); %新しいフォルダを作成する
oldFolder = cd('face');
for theta = -5:5%回転角11
for s=-2:2%水平奥行10
for c=-2:2%上下5
for size=7:8%圧縮2
o=0;o=o+1;
tm = projective2d([cosd(theta*2) -sind(theta*2) 0.0002*s; ...
sind(theta*2) cosd(theta*2) 0.0002*c; ...
0 0 1]);
outputImage = imwarp(I,tm);%44*10*5=2200
outputImage2 = imresize(outputImage,0.1*size);%2200*2=4400
imwrite(outputImage,(sprintf('Oimg%d.png',o)));%2200
imwrite(outputImage2,(sprintf('ORSimg%d.png',o)));%2200
end
end
end
end
cd(oldFolder);
end
採用された回答
Atsushi Ohashi
2021 年 2 月 22 日
保存するファイル名をfor文の中で”o”をインクリメントされていますが、for文の中で毎回"o"をゼロで初期化しているため、同じファイル名に上書きしていると思います。ファイル名を一意にするよう修正をご検討ください。
for size=7:8%圧縮2
o=0;o=o+1; ← 毎回ゼロで初期化
また、気になった点として、for文の変数名にsizeを使わていますが、これは関数のsizeと同じになります。できれば関数名と重複しないような変数名を利用いただくことをお勧めするのと、mkdirがfor文内で利用されていますが、この場合、何度もフォルダを作成しようとし、警告が発生しますので、フォルダは最初に一回作成するのが良いと思います。
下記に簡単ですが、修正案を記載しました。実際の動作確認はしていただければと思います。
今回のご質問に関連して、imageDatastoreという関数が便利に使えると思いますので、下記をご参照ください。
mkdir('face'); %新しいフォルダを作成する
oldFolder = cd('face');
o = 0;
for i=1:size(b,1)
I = imread(b{i});
for theta = -5:5%回転角11
for s=-2:2%水平奥行10
for c=-2:2%上下5
for r=7:8%圧縮2
o=o+1;
tm = projective2d([cosd(theta*2) -sind(theta*2) 0.0002*s; ...
sind(theta*2) cosd(theta*2) 0.0002*c; ...
0 0 1]);
outputImage = imwarp(I,tm);%44*10*5=2200
outputImage2 = imresize(outputImage,0.1*r);%2200*2=4400
imwrite(outputImage,(sprintf('Oimg%d.png',o)));%2200
imwrite(outputImage2,(sprintf('ORSimg%d.png',o)));%2200
end
end
end
end
end
cd(oldFolder);
0 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Convert Image Type についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!