MATLAB Answers

Unable to image files automatically with different file names

2 views (last 30 days)
Hi,
I have a GUi where I want to save the images from the 2nd image axes(handles.axes2) and generate file names automatically. Please find my code below:
function pushbutton1_Callback(hObject, eventdata, handles)
myFolder = 'D:\regionGrowing_MLT';
% Check to make sure that folder actually exists. Warn user if it doesn't.
if ~isfolder(myFolder)
errorMessage = sprintf('Error: The following folder does not exist:\n%s\nPlease specify a new folder.', myFolder);
uiwait(warndlg(errorMessage));
myFolder = uigetdir(); % Ask for a new one.
if myFolder == 0
% User clicked Cancel
return;
end
end
% Get a list of all files in the folder with the desired file name pattern.
filePattern = fullfile(myFolder, '*.jpg'); % Change to whatever pattern you need.
theFiles = dir(filePattern);
num_files=length(theFiles);
imgs=cell(1,num_files);
handles.num_files=num_files;
handles.myFolder=myFolder;
handles.filePattern=filePattern;
handles.theFiles=theFiles;
handles.InputImage = {};
for k = 1 : length(theFiles)
baseFileName = theFiles(k).name;
fullFileName = fullfile(theFiles(k).folder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
% Now do whatever you want with this file name,
% such as reading it in as an image array with imread()
imageArray = imread(fullFileName);
imshow(imageArray,'parent',handles.axes1); % Display image.
drawnow; % Force display to update immediately.
InputImage=imageArray;
% axes(handles.axes1);
handles.num_files=num_files;
handles.theFiles=theFiles;
handles.InputImage{end+1}= InputImage;
setappdata(handles.pushbutton1,'img',handles.InputImage);
guidata(hObject, handles);
end
end
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
InputImage=handles.InputImage;
theFiles = handles.theFiles;
J=InputImage;
handles.seg={};
% J = getappdata(handles.pushbutton1,'img');
for i = 1:length(theFiles)
try
J{i}=rgb2gray(J{i});
end
x=300; y=340;
a=imgaussfilt(J{i},2);
b=adapthisteq(a);
m=regiongrowing_MLT(b,x,y,12);
m=imfill(m,'holes');
% figure,imshow(m)
bw=imbinarize(m);
bw=bwareafilt(bw,1);
% figure,imshow(bw)
I = imresize(m,.5); %-- make image smaller
m1 = imresize(bw,.5); % for fast computation
% subplot(2,2,1); imshow(I); title('Input Image');
% subplot(2,2,2); imshow(m1); title('Initialization');
% subplot(2,2,3); title('Segmentation');
seg = region_seg(I, m1, 30); %-- Run segmentation
imshow(seg,'parent',handles.axes2);
% axes(handles.axes2);
handles.seg{end+1}=seg;
setappdata(handles.pushbutton2,'img',handles.seg);
end
filename = fullfile(myFolder, sprintf('file%d.jpg',seg));
imwrite(InputImage, filename);
guidata(hObject, handles);
end
I want the results to be saved as file1.jpg,file2.jpg,file3.jpg, etc. Unfortunately, I get the following errors.
D:\regionGrowing_MLT\file0.jpgfile0.jpgfile0.jpgfile0.jpgfile0,...
for writing. You might not have write permission.
Error in ngui>pushbutton2_Callback (line 167)
imwrite(seg, filename);
I have attached few imput images. Any suggestions would be appreciated.

Accepted Answer

Geoff Hayes
Geoff Hayes on 8 Jun 2021
Warid - the code error message
Error in ngui>pushbutton2_Callback (line 167)
imwrite(seg, filename);
does not correspond exactly to a line of code in your pushbutton2_Callback. The closest I could see was
imwrite(InputImage, filename);
Note that filename is set as
filename = fullfile(myFolder, sprintf('file%d.jpg',seg));
but nowhere in the function do you define what myFolder is. Perhaps you need to be using handles.myFolder.
  3 Comments
Warid Islam
Warid Islam on 8 Jun 2021
Using handles.myFolder solved the problem for me. Thank you for your suggestion.

Sign in to comment.

More Answers (0)

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!