我进行了图像处理以检测图像中的白色,然后我发现了图像中所有斑点的质心。现在,我正在尝试在matlab中开发一个GUI,我必须在其中显示质心。为此我需要编辑框和文本框,我在其中更新我的质心值。现在,问题是在图像中,blob的数量不固定。这也可以是0或大于8或10。所以,我想改变acc的盒子数量。到blob的数量。例如:设大小写1,其中我在图像中有三个blob,因此,应该有三行编辑框,其中每行有2个用于x和y质心的编辑框。让情况2,其中我在图像中有五个斑点,因此,应该有五行编辑框,其中每行有2个用于x和y质心的编辑框。我编写了代码来添加编辑和文本框,如图
所示此代码如下:
function draw_Callback(hObject, eventdata, handles)
% hObject handle to draw (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x= 150; y = 327; h = 136; w= 39; x1 = 349; y1= 327; h1= 101; w1= 39;
num = str2num(char(get(handles.edit1,'String')));
for i = 1:num
txt(i) = uicontrol('Style','text',...
'Position',[x y-50*i h w],...
'String',i);
edit(i) = uicontrol('Style','edit',...
'Position',[x1 y1-50*i h1 w1],...
'String',0);
edit(i) = uicontrol('Style','edit',...
'Position',[x1+140 y1-50*i h1 w1],...
'String',0);
end
但我的问题是我无法在这些编辑框中插入值。例如,如果图像中有两个blob,则质心值为(100,200)和(260,122)。所以我必须将这些值放入相应的编辑框中。
我怎么能这样做?
答案 0 :(得分:0)
您需要将句柄存储到handles
数据结构中的编辑框,以便您可以从另一个回调函数中访问它们
function draw_Callback(hObject, eventdata, handles)
x= 150; y = 327; h = 136; w= 39; x1 = 349; y1= 327; h1= 101; w1= 39;
num = str2num(char(get(handles.edit1,'String')));
for i = 1:num
txt(i) = uicontrol('Style','text',...
'Position',[x y-50*i h w],...
'String',i);
editx(i) = uicontrol('Style','edit',...
'Position',[x1 y1-50*i h1 w1],...
'String',0);
edity(i) = uicontrol('Style','edit',...
'Position',[x1+140 y1-50*i h1 w1],...
'String',0);
end
handles.txt = txt;
handles.editx = editx;
handles.edity = edity;
% Store the handle structure
guidata(hObject, handles);
然后你可以从另一个回调中更新它们
function other_Callback(hObject, eventdata, handles)
set(handles.editx(1), 'String', 'x1');
set(handles.edity(1), 'String', 'y1');
end
我认为显示质心信息的一个更好的选择是使用uitable
,其中每个质心是一行。然后,您不必经常创建新的uicontrol
对象
htable = uitable();
% Then from anywhere in your code
set(htable, 'Data', {1, 2; 3, 4; 5, 6; 7, 8}, 'ColumnName', {'X', 'Y'})