根据Matlab GUI中图像中blob的数量生成不同的编辑框和文本框,并在

时间:2017-04-04 10:04:41

标签: matlab user-interface

我进行了图像处理以检测图像中的白色,然后我发现了图像中所有斑点的质心。现在,我正在尝试在matlab中开发一个GUI,我必须在其中显示质心。为此我需要编辑框和文本框,我在其中更新我的质心值。现在,问题是在图像中,blob的数量不固定。这也可以是0或大于8或10。所以,我想改变acc的盒子数量。到blob的数量。例如:设大小写1,其中我在图像中有三个blob,因此,应该有三行编辑框,其中每行有2个用于x和y质心的编辑框。让情况2,其中我在图像中有五个斑点,因此,应该有五行编辑框,其中每行有2个用于x和y质心的编辑框。我编写了代码来添加编辑和文本框,如图

所示

enter image description here

此代码如下:

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)。所以我必须将这些值放入相应的编辑框中。

我怎么能这样做?

1 个答案:

答案 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'})