MATLAB Answers


imshow inhibits gui from running minimized

Asked by Max
on 21 Mar 2014
Latest activity Commented on by 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!


Log in to comment.

2 Answers

Answer by Sean de Wolski
on 21 Mar 2014
 Accepted Answer

Specify the parent for imshow to plot to inside of imshow, rather than as axes(handles.axes1)

ax = gca;

Hide figure



Log in to comment.

Answer by 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

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:

Log in to comment.

Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!