Я применил обнаружение края канны на изображении и теперь хочу обрезать его часть для дальнейшей обработки. Я создал 4 оси с метками axes1, axes2, axes3 и axes4. Я хочу сначала отобразить изображение в осях 1, затем ребро, обнаруженное снова в осях1. Наконец, обрезанное изображение должно отображаться в осях 3 и изображение после удаления отверстий в осях4.Matlab GUI: проблемы при использовании imfreehand()
Я в том числе образец кода, который воссоздает проблему:
function varargout = samp_GUI(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @samp_GUI_OpeningFcn, 'gui_OutputFcn', @samp_GUI_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before samp_GUI is made visible.
function samp_GUI_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
% --- Outputs from this function are returned to the command line.
function varargout = samp_GUI_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
% --- Executes on button press in browse.
function browse_Callback(hObject, eventdata, handles)
[filename pathname] = uigetfile({'*.jpg';'*.bmp'},'File Selector');
handles.myImage = strcat(pathname, filename);
axes(handles.axes1);
imshow(handles.myImage)
im=imread(handles.myImage);
bw3=im2bw(im,0.3); %threshold value taken as 0.3
BW3=edge(bw3,'canny');
edge_im = BW3;
axes(handles.axes1);
imshow(BW3);
h=imfreehand(handles.axes1);
M=~h.createMask();
I(M) = 0;
axes(handles.axes2);
imshow(I);title('Cropped Image')
I = bwareaopen(I, 50);
axes(handles.axes3);
imshow(I),title('Removed Holes');
% save the updated handles object
guidata(hObject,handles);
Когда я выполнить код в файле .m, он работает отлично с различными изображениями открываются в разных окнах, но когда тот же код запуска для графического интерфейса, пустые изображения - проблемы. Я не понимаю, где проблема.
Вместо этого я рекомендую использовать 'subplot', проще. – flawr
Вопросы по StackOverflow обычно должны содержать [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/help/mcve). Код, который вы опубликовали, не является полным и не поддается проверке. Пожалуйста, [edit] (http://stackoverflow.com/posts/34708069/edit) ваш вопрос, чтобы убедиться, что код в вашем вопросе ** Минимальный ** (только код, необходимый для воспроизведения), ** Завершить ** (весь код, необходимый для воспроизведения) и ** Подтверждаемый ** (мы должны иметь возможность воспроизвести проблему, используя только код в вашем вопросе, не меньше и ничего больше). – excaza
Я попробовал 'subplot' тоже, но та же ошибка сохранилась. Кажется, что 'imfreehand()' не принимает никакого ввода, несмотря на то, что я отмечаю ROI на изображении. –