根据MatlabGUI中图像中的BLOB数量生成不同的编辑框和文本框,并在其中写入值
我做了图像处理来检测图像中的白色,然后我找到了图像中所有斑点的质心。现在,我正试图在matlab中开发一个GUI,其中必须显示质心。为此,我需要编辑框和文本框来更新质心值。现在的问题是,在图像中,斑点的数量不是固定的。这可能是0或大于8或10。所以,我想根据BLOB的数量改变盒子的数量。例如:假设情况1,图像中有三个blob,所以应该有三行编辑框,其中每行有两个x和y质心的编辑框。在第二种情况下,图像中有五个blob,所以应该有五行编辑框,每行有两个x和y质心的编辑框。我已经编写了添加编辑框和文本框的代码,如图所示 代码如下:根据MatlabGUI中图像中的BLOB数量生成不同的编辑框和文本框,并在其中写入值,matlab,user-interface,Matlab,User Interface,我做了图像处理来检测图像中的白色,然后我找到了图像中所有斑点的质心。现在,我正试图在matlab中开发一个GUI,其中必须显示质心。为此,我需要编辑框和文本框来更新质心值。现在的问题是,在图像中,斑点的数量不是固定的。这可能是0或大于8或10。所以,我想根据BLOB的数量改变盒子的数量。例如:假设情况1,图像中有三个blob,所以应该有三行编辑框,其中每行有两个x和y质心的编辑框。在第二种情况下,图像中有五个blob,所以应该有五行编辑框,每行有两个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
但我的问题是无法在这些编辑框中插入值。例如,对于图像中的两个斑点,质心值为(100200)和(260122)。所以我必须把这些值放到相应的编辑框中
如何做到这一点?您需要将句柄存储到
句柄
数据结构中的编辑框中,以便可以从另一个回调函数中访问它们
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
在我看来,显示质心信息的一个更好的选择是在每个质心都是一行的情况下使用。然后您不必不断创建新的uicontrol
对象
htable = uitable();
% Then from anywhere in your code
set(htable, 'Data', {1, 2; 3, 4; 5, 6; 7, 8}, 'ColumnName', {'X', 'Y'})