このような6つのフォルダがあります>>画像 と各フォルダにはいくつかの画像が含まれています。matlabで画像を読み取る方法は知っていますが、私の質問は、これらのフォルダーをトラバースしてabc.mファイル(このファイルはこの画像に表示されています)の画像を読み取る方法です。
3 に答える
したがって、基本的には、すべての画像を 1 つのフォルダーに入れてimread()
? すべての画像を MATLAB の作業ディレクトリにコピーし (そして、どのフォルダーから来たかがわかるように名前を付けて)、その方法で読み込むことができるからです。
コマンドを使用してcd
ディレクトリを変更し (*nix のように)、各フォルダーをトラバースしながら画像を読み込み/読み取ります。絶対パス名が必要になる場合があります。
画像を含むディレクトリへのパスがわかっている場合は、そのディレクトリでdirを使用して、その中のすべてのファイル (およびディレクトリ) を一覧表示できます。必要な画像拡張子でファイルをフィルター処理すると、指定したディレクトリにすべての画像を含む配列が作成されます。
dirname = 'images';
ext = '.jpg';
sDir= dir( fullfile(dirname ,['*' ext]) );;
sDir([sDir.isdir])=[]; % remove directories
% 以下は、ワイルドカード dir ^^
b=arrayfun(@(x) strcmpi(x.name(end-length(ext)+1:end),ext),sDir); のため廃止されました。% 拡張子のフィルタ
sFiles = sDir(b);
使用する前に、各ファイルの名前にディレクトリのプレフィックスを付けることをお勧めします。
sFileName(ii) = fullfile(dirname, sFiles(ii));
この結果のファイルは、必要に応じて処理できます。たとえば、すべてのファイルをロードします。
for ii=1:numel(sFiles)
data{i}=imread(sFiles(ii).name)
end
サブディレクトリも再帰したい場合は、以下をご覧になることをお勧めします。
MATLAB の特定のディレクトリの下にあるすべてのファイルを取得する方法は?
またはFEXの他のソリューション:
http://www.mathworks.com/matlabcentral/fileexchange/15505-recursive-dir
編集: dir 呼び出しをワイルドカード化するという Amro の提案を追加
最も簡単な方法は、確かに matlab の forlder を右クリックし、[パスに追加] >> [選択したフォルダーとサブフォルダー] です。
imread
次に、パスを指定せずに画像を取得できます。