i want to use imfreehand on an image displayed on axes and display the selected area on clicking an button in the same axes in GUI but when i am done with imfreehand and while i am using imshow to display it i get error

조회 수: 1(최근 30일)
{ this the error i get:
Error using images.internal.imageDisplayParsePVPairs>parseParamValuePairs (line 150) Function IMAGEDISPLAYPARSEPVPAIRS expected an even number of parameter/value arguments.
Error in images.internal.imageDisplayParsePVPairs (line 133) [common_args,specific_args] = parseParamValuePairs(varargin(param1_index:end),valid_params,...
Error in images.internal.imageDisplayParseInputs (line 69) [common_args,specific_args] = images.internal.imageDisplayParsePVPairs(varargin{:});
Error in imshow (line 222) images.internal.imageDisplayParseInputs({'Parent','Border','Reduce'},preparsed_varargin{:});
Error in newGUI>pushbutton9_Callback (line 128) imshow(I,'parent');
Error in gui_mainfcn (line 95) feval(varargin{:});
Error in newGUI (line 42) gui_mainfcn(gui_State, varargin{:});
Error in matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)newGUI('pushbutton9_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback }
% --- Executes on button press in pushbutton9. function pushbutton9_Callback(hObject, eventdata, handles) % hObject handle to pushbutton9 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
{ This is the code:
axes(handles.axes7); % Assuming you want axes2 to be the one you draw in. handleToDrawing = imfreehand(handles.axes7); %i=imfreehand; %position = wait(i); M = ~i.createMask(); mask(:,:,1)=M; mask(:,:,2)=M; mask(:,:,3)=M; I(mask)=255; axes(handles.axes7); imshow(I);


Andrew Chen
Andrew Chen 2019년 3월 7일
Well almost a year later but if you still need an answer, here's something that worked for me:
Assume you have an image displayed on 'axis1' and want to push a button, use imfreehand() and then display the ROI of the image in a new axis, 'axis2'. Also lets say 'data' is whay is displayed in 'axis1'.
This should work for the pushbutton:
function DrawROIButton_Callback(hObject, eventdata, handles)
h = imfreehand(handles.axis1); %call imfreehand on what is displayed in axis1
handles.mask = h.createMask(); %create and store binary mask in handles.mask
imshow(handles.mask.*handles.data); %Dispy the result of the original image and mask in axis2
Hope it helps, if you still need it

Community Treasure Hunt

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

Start Hunting!

Translated by