我正在使用matlab进行图像处理任务,我在对话框中创建了一个滑块,用于在轴上显示的图像上应用和更新高斯模糊滤镜 但它不能应用它,它表明错误 ==>中的错误MatlabTestProject>名称为392 轴(handles.axes4);
???评估uicontrol回调时出错
这是我的代码
function mygui()
out = dialog('WindowStyle', 'normal', 'Name', 'My Dialog','Resize','off');
hSlider = uicontrol('Style','slider','Min',3,'Max',15,'Value',3,'Callback',@gaussian_blur);
%hListener = addlistener(hSlider,'Value','PostSet',@(s,e)disp('hi'));
function gaussian_blur(s,e,handles)
global imag;
slider_value = get(s,'Value');
slider_value=round(slider_value);
%display(slider_value);
%disp('hello')
%create filter
%sliderValueTxt=num2str(slider_value);
%set(handles.kSizeValueText ,'String',sliderValueTxt);
h = fspecial('gaussian', slider_value,0.5);
imag=imfilter(imag,h,'conv');
axes(handles.axes4);
imshow(imag)
% --------------------------------------------------------------------
function gaussianBlur_Callback(hObject, eventdata, handles)
% hObject handle to gaussianBlur (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
gaussian_dialog_Gui();
答案 0 :(得分:2)
你真的很亲密!在定义滑块的侦听器对象回调时,您需要做的就是将handles
作为函数gaussian_blur
的参数。
即更换此行:(虽然看起来像测试线)
hListener = addlistener(hSlider,'Value','PostSet',@(s,e) disp('hi'));
有这样的事情:
hListener = addlistener(hslider,'Value','PostSet',@(s,e) gaussian_blur(handles));
为了确保它有效,我使用轴和滑块以编程方式创建了一个测试GUI,它运行良好!实际上我改变了一点过滤器以查看对我的测试图像的影响,但它在你的情况下应该也能正常工作:
function GaussianSlider()
clear
clc
close all
handles.Image = imread('peppers.png');
handles.fig = figure('Position',[500 500 600 600],'Units','pixels');
handles.axes1 = axes('Units','pixels','Position',[50 100 400 400]);
handles.slider = uicontrol('Style','slider','Position',[50 50 400 20],'Min',3,'Max',15,'Value',3);%// I commented this for the purpose of demonstration. 'Callback',@gaussian_blur(handles));
%// That's the important part: add 'handles' as input argument to
%// gaussian_blur.
handles.Listener = addlistener(handles.slider,'Value','PostSet',@(s,e) gaussian_blur(handles));
imshow(handles.Image,'Parent',handles.axes1);
guidata(handles.fig);
function gaussian_blur(handles)
slider_value = round(get(handles.slider,'Value'));
%// I modified a bit the filter to see the effect
h = fspecial('gaussian',slider_value,slider_value);
handles.Image=imfilter(handles.Image,h,'conv');
axes(handles.axes1);
imshow(handles.Image)
end
end
如果我们查看2个屏幕截图(即2个不同的滑块位置):
移动滑块后:
那就是它!希望有所帮助!如果有什么不清楚请告诉我。
哦,如果您不知道:滑块的实际回调仅在您松开按钮或按任意箭头时执行。只要您按住滑块并移动它,它就只会执行将要执行的侦听器回调。