imshow inhibits gui from running minimized

3 views (last 30 days)
Max on 21 Mar 2014
Commented: Sean de Wolski on 9 Jun 2014
I have an question concerning the imshow command for GUI. I am processing a lot images and wanted to display the current image using the axes feature. It works fine, only that the whole window gets refreshed everytime a new image is processed. Thats why i can't minimize the window which stays always in the foreground.
What could i do to avoid this?
Code looks like this: It reads some images, does the processing and safes them afterwards.
function execute_Callback(hObject, eventdata, handles)
global filenames
global path
for i=1:length(filenames)
pic = imread(nfilename2);
Thank you!

Accepted Answer

Sean de Wolski
Sean de Wolski on 21 Mar 2014
Specify the parent for imshow to plot to inside of imshow, rather than as axes(handles.axes1)
ax = gca;
Hide figure

More Answers (1)

Erik on 5 Jun 2014
The solution from Sean does not seem to work in a gui.
  • Suppose we create a guide with only a single axes 'axes1'.
  • In the OpeningFnc we create, initialize and start a timer object to trigger every 0.1 sec.
  • In the timer callback function we call :
If it runs, then the gui window get on top with every call to imshow. Not so nice for live image analysis applications. Therefor I prefere therefor to use simple image instead of imshow and change the axis to off.
function imshowguitest_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
handles.timer = timer;
handles.timer.StartDelay = 0.1;
handles.timer.Period = 0.1;
handles.timer.ExecutionMode = 'fixedSpacing';
handles.timer.TimerFcn = {@timer_Callback, hObject};
guidata(hObject, handles);
function figure1_CloseRequestFcn(hObject, eventdata, handles)
function timer_Callback(~, ~,hObject)
handles = guidata(hObject);
% a = imread('peppers.png');
% image(a,'parent',handles.axes1);
% axis(handles.axes1,'off');
  1 Comment
Sean de Wolski
Sean de Wolski on 9 Jun 2014
For this I would take a different approach. Instead of rebuilding the image on each iteration, just update its color data ( 'CData' ). See my example here:
hImage = imshow(cat(3,ones(200,400),zeros(200,400,2)));
T = timer('Period',1,'TasksToExecute',10,...
'Timerfcn',@(~,~)set(hImage,'CData',circshift(get(hImage,'CData'),[0 0 1])),...
Full link:

Sign in to comment.


Community Treasure Hunt

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

Start Hunting!