How to take image from multi folders?

2 ビュー (過去 30 日間)
D. Frank
D. Frank 2020 年 6 月 19 日
コメント済み: D. Frank 2020 年 6 月 22 日
Hi everybody
I have a few thousand folders, each folder contains 2 images with information in their name, i want to take randomly 1 image from each folder and put all the taken images into one new folder in desktop for further calculation, please help, thank you very much.
  4 件のコメント
Rik
Rik 2020 年 6 月 21 日
You mean you want to read an image? If you know the file names you can just use imread.
D. Frank
D. Frank 2020 年 6 月 22 日
Read image is the next step of computing these files, the main thing i want to do is taking 1 random image from each subfolder, and there are 2900 subfolders in 1 folder to add to path in matlab :((((((

サインインしてコメントする。

採用された回答

Monalisa Pal
Monalisa Pal 2020 年 6 月 21 日
編集済み: Monalisa Pal 2020 年 6 月 22 日
Hi,
'fetching a random image' part of the following code may help you
clearvars -global
clearvars
close all
clc
% creating destination folder
destination = 'destinationfolder';
mkdir(destination);
n_folders = 10; % say there are 10 folders
for i = 1:n_folders
% fetching the contents of the folders
foldername = ['folder_', num2str(i), '/'];
path = [foldername, '*.png']; % or other imgfile extensions
contents = dir(path);
% fetching a random image
if numel(contents) < 2
error([foldername, ' has only ', num2str(numel(contents)), ' image files']);
end
img_index = randi([1, numel(contents)], 1);
disp(['From ', foldername, ' copying ', contents(img_index).name]);
source = [foldername, contents(img_index).name];
copyfile(source, destination);
end
  20 件のコメント
Monalisa Pal
Monalisa Pal 2020 年 6 月 22 日
Mr. Frank, I misunderstood the directory structure earlier. Lets see if this works.
clearvars -global
clearvars
close all
clc
% creating destination folder
destination = 'Images_place';
mkdir(destination);
folder = 'Bigfolder';
sub_folders = dir(folder);
%n_folders = 2950; % say there are 2950 folders
% n_folders = numel(sub_folders) - 2;
exts = {'*.jpg', '*.gif', '*.png', '*.jpeg', '*.bmp'};
for i = 3:numel(sub_folders)
% fetching the contents of the folders
foldername = ['Bigfolder/', sub_folders(i).name, '/'];
contents_parts = cellfun(@(E) dir( fullfile(foldername, E) ), exts, 'uniform', 0);
contents = vertcat(contents_parts{:});
% fetching a random image
if isempty(contents)
fprintf(1, 'caution: folder "%s" had no useable images\n', foldername);
continue;
end
img_index = randi([1, numel(contents)], 1);
disp(['From ', foldername, ' copying ', contents(img_index).name]);
filename = fullfile(foldername, contents(img_index).name);
copyfile(filename, destination);
end
D. Frank
D. Frank 2020 年 6 月 22 日
Dear Ms. Monalisa Pal and Mr. Roberson, the code ran smoothly, thank you very much for your patience and your help.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeFile Operations についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by