matlab - Read images from sub folders and save into another folder -
i have code here.
start_path = fullfile(matlabroot, '\toolbox\images\imdemos'); % ask user confirm or change. toplevelfolder = uigetdir(start_path); if toplevelfolder == 0 return; end % list of subfolders. allsubfolders = genpath(toplevelfolder); % parse cell array. remain = allsubfolders; listoffoldernames = {}; while true [singlesubfolder, remain] = strtok(remain, ';'); if isempty(singlesubfolder) break; end listoffoldernames = [listoffoldernames singlesubfolder]; end numberoffolders = length(listoffoldernames) % process image files in folders. k = 1 : numberoffolders % folder , print out. thisfolder = listoffoldernames{k}; fprintf('processing folder %s\n', thisfolder); % png files. filepattern = sprintf('%s/*.png', thisfolder); basefilenames = dir(filepattern); % add on tif files. filepattern = sprintf('%s/*.tif', thisfolder); basefilenames = [basefilenames; dir(filepattern)]; % add on jpg files. filepattern = sprintf('%s/*.jpg', thisfolder); basefilenames = [basefilenames; dir(filepattern)]; numberofimagefiles = length(basefilenames); % have list of files in folder. if numberofimagefiles >= 1 % go through image files. f = 1 : numberofimagefiles fullfilename = fullfile(thisfolder, basefilenames(f).name); pathname = strcat('c:\\xampp\\htdocs\\pacs_client\\cbir_matlab\\ano\\'); outputbasefilename = sprintf('%3.3d.jpg',f); outputfullfilename = fullfile(pathname, outputbasefilename); fprintf('processing image file %s\n', fullfilename); im=imread(fullfilename); imshow(im); data = im; imwrite(data,[pathname,outputbasefilename]); end else fprintf(' folder %s has no image files in it.\n', thisfolder); end end
i tried save images sub folders folder.but not images.only few numbers of images saved.i want save images.can me code?
i updated code bit please check if works you. 1 issue being base file name '%3.3d.jpg' every picture '.jpg' if not. loading , showing images, need copy them, can go copyfile
. 3rd setting every image 001.jpg overwrite the last 001.jpg previous folder. have add number next folder starts higher numbers.
start_path = fullfile(matlabroot, '\toolbox\images\imdemos'); % ask user confirm or change. toplevelfolder = uigetdir(start_path); if toplevelfolder == 0 return; end %dir should go. if destination not %toplevelfolder %destinationpath = strcat('d:\\pics\\'); destinationpath = toplevelfolder; % list of subfolders. allsubfolders = genpath(toplevelfolder); % parse cell array. remain = allsubfolders; listoffoldernames = {}; %while true % [singlesubfolder, remain] = strtok(remain, ';'); % if isempty(singlesubfolder) % break; % end % listoffoldernames = [listoffoldernames singlesubfolder]; %end %your while worked fine, try avoid 'while true' break i=1:sum(strfind(allsubfolders,';')) [singlesubfolder, remain] = strtok(remain, ';'); listoffoldernames = [listoffoldernames singlesubfolder]; end numberoffolders = length(listoffoldernames) %set inital count picturecount=0; % process image files in folders. k = 1 : numberoffolders % folder , print out. thisfolder = listoffoldernames{k}; fprintf('processing folder %s\n', thisfolder); % png files. filepattern = sprintf('%s/*.png', thisfolder); basefilenames = dir(filepattern); % add on tif files. filepattern = sprintf('%s/*.tif', thisfolder); basefilenames = [basefilenames; dir(filepattern)]; % add on jpg files. filepattern = sprintf('%s/*.jpg', thisfolder); basefilenames = [basefilenames; dir(filepattern)]; numberofimagefiles = length(basefilenames); % have list of files in folder. if numberofimagefiles >= 1 % go through image files. f = 1 : numberofimagefiles fullfilename = fullfile(thisfolder, basefilenames(f).name); [~,~,ext] = fileparts(basefilenames(f).name); %get extension outputbasefilename = sprintf(['%3.3d' ext],f+picturecount);%create name based on picturecount outputfullfilename = fullfile(destinationpath, outputbasefilename); %fprintf('processing image file %s\n', fullfilename); %im=imread(fullfilename); %imshow(im); %data = im; %imwrite(data,[pathname,outputbasefilename]); %you dont need in matlab copy file copyfile(fullfilename,outputfullfilename); end picturecount=picturecount+numberofimagefiles;%set picturecount next k else fprintf(' folder %s has no image files in it.\n', thisfolder); end end
Comments
Post a Comment