Rename images using uigetfile and cell array
1 回表示 (過去 30 日間)
古いコメントを表示
Greetings,
so Im using the following function to rename my images that I would like to open via the uigetfile and then try to rename them with the movefile method. This code only works when the images are in the matlab path.
function output(~)
dirData = dir('*.jpg');
fileNames = {dirData.name};
for iFile = 1:numel(fileNames)
newName = sprintf('left%03d.jpg',iFile);
movefile(fileNames{iFile},newName);
end
But now if I try to input this:
dirData = uigetfile({'*.jpg'},'MultiSelect', 'on', 'Please selecet the images');
instead of:
dirData = dir('*.jpg');
then it just gives me the error message: Struct contents reference from a non-struct array object. Error in output (line 4) fileNames = {dirData.name};
3 件のコメント
採用された回答
Adam
2017 年 8 月 15 日
Use the two output form of uigetfile:
[filenames, pathname] = uigetfile({'*.jpg'}, 'MultiSelect', 'on', 'Please select the images');
fullFilenames = cellfun( @(x) fullfile( pathname, x ), filenames, 'UniformOutput', false );
and then it should work as you have the full path instead of just a filename that must be on the Matlab path.
4 件のコメント
Adam
2017 年 8 月 15 日
You need to use fullfile with a directory path for your destination file too in movefile. Don't just give it a filename. By default it will just save it in the current working directory which is presumably not what you want.
doc fullfile
should help. If you are creating each new filename in a loop as you appear to be then you won't need cellfun to do these as you did for the source files.
その他の回答 (1 件)
Image Analyst
2017 年 8 月 14 日
編集済み: Image Analyst
2017 年 8 月 15 日
Try this:
folder = pwd; % Or use getdir().
filePattern = fullfile(folder, '*.jpg'); % Don't use JPG images for image analysis.
dirData = dir(filePattern);
for k = 1 : length(dirData)
thisFileName = fullfile(folder, dirData(k).name);
newName = sprintf('left%03d.jpg',k);
newFileName = fullfile(folder, newName);
fprintf('Renaming %s to %s\n', dirData(k).name, newName);
movefile(thisFileName, newName);
end
2 件のコメント
Image Analyst
2017 年 8 月 15 日
You can use this code if you want the user to specify the files:
folder = pwd; % Starting folder.
filePattern = fullfile(folder, '*.jpg'); % Don't use JPG images for image analysis.
[filenames, folder] = uigetfile(filePattern, 'MultiSelect', 'on', 'Please select the images');
for k = 1 : length(filenames)
thisFileName = fullfile(folder, filenames{k});
newName = sprintf('left%03d.jpg',k);
newFileName = fullfile(folder, newName);
fprintf('Renaming %s to %s\n', filenames{k}, newName);
movefile(thisFileName, newFileName);
end
参考
カテゴリ
Help Center および File Exchange で Image Processing Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!