所以我正在建立一个图像分类器。在GUI中,图像加载并在文本框上插入值,然后按下按钮。我在轴上加载图像时遇到问题。因为当调用axes函数时,句柄为零(由于:%处理为空 - 在调用所有CreateFcns之后才创建句柄)。我的问题是,我如何一次只为一个轴调用一个图像。
理想的解决方案是,我创建一个handles.images = imagedatastore,每次按下我添加到计数器(我已经制作)的按钮,然后给索引从数据存储区获取图像。我的问题是我无法获得第一张图片,因为在开始时句柄是空的。我为轴做了函数函数:
% --- Executes during object creation, after setting all properties.
function axes1_CreateFcn(hObject, eventdata, handles)
% hObject handle to axes1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
[pict_croped,Nphotos,Date_img] =getcropedimagages;
handles.img =pict_croped;
i=readimage(handles.img,1);
% axes(hObject)
imshow(i)
% Hint: place code in OpeningFcn to populate axes1
但这有两个问题,第一,我真的不想在按下按钮时调用创建数据存储区的功能,第二,我仍然无法得到计数器的指示。功能,如果我有:
i=readimage(handles.img,handles.counter)
它会在第一次给我错误,没有handle.counter
知道如何解决这个问题吗?这是我正在构建的第一个GUI。
答案 0 :(得分:1)
问题在GUIDE为您提供的评论中非常清楚。在运行所有handles
之前,不会填充CreateFcn
结构,因此您需要使用OpeningFcn
对图形对象进行任何初始化。然后,您可以将所需的任何数据添加到handles
结构中,并使用guidata
进行保存,以便在所有其他回调函数中使用它。
function OpeningFcn(hObject, eventData, handles)
[pict_croped,Nphotos,Date_img] = getcropedimagages;
handles.img = pict_croped;
i = readimage(handles.img,1);
imshow(i, 'Parent', handles.haxes1)
% "Save" the changes to the handles object
guidata(hObject, handles)
答案 1 :(得分:0)
好吧,我最终得到: 在开幕式中:
i = readimage(handles.img,handles.counter);
imshow(, 'Parent', handles.axes1)
并在按钮回拨中:
i = readimage(handles.img,handles.counter);
imshow(i, 'Parent', handles.axes1)
最后是一个非常简单的解决方案,我认为我只是在第一次迭代中被封锁了......