0

我正在尝试删除handles.roi1我创建的句柄。

我已经尝试使用该功能delete

delete(handles.roi1)

但它给了我这个错误:

Argument must contain a string. 

我的目的是删除一个我从未创建过的句柄。

你有什么建议或提示我该怎么做?


可能我表达的不对...

我正在做一个 GUI,我在一个按钮中定义handles.roi1,但后来我想在另一个按钮上删除它。这是因为,在那个按钮上我做了:

try a=handles.roi1;
catch
    b=11;

我希望它转到catch. 我试图这样做,handles = rmfield(handles, 'roi1');但没有奏效。

4

2 回答 2

1

编辑:重写答案以匹配 OP 添加的信息。

如果handles.roi1是用创建的imread

handles.roi1 = imread('test.jpg');

或者,首先将内容存储在变量中a,然后复制ainto handles.roi1(在这种情况下,您有 2 个相同数据的副本):

a = imread('test.jpg');
handles.roi1 = a;

然后没有打开的文件句柄。此外,ahandles.roi1相等,它们不是文件句柄,但它们中的每一个都包含图形文件的彩色或灰度图像(在本例中)。test.jpg

在 MATLAB 中,您通常使用 获取文件句柄fopen,但有几个文件 I/O 命令使用文件句柄,例如imreadxlsread并且fastaread不使用文件句柄。

在这种情况下,您想要(我假设)是摆脱roi1struct的字段handleshandles.roi1在 MATLAB 语法中),因此您可以使用rmfield这种方式:

handles = rmfield(handles, 'roi1');

handles它将没有字段的新副本存储roi1回名为handles.

请注意,这与文件句柄或图形对象句柄无关。它只是一个名为handles您或某人的名称与 name 混淆的结构handles,尽管事实上imread根本不返回任何文件句柄(也不是图形对象句柄)!我宁愿命名它imageData而不是handles,因为那是它真正包含的内容。

另一方面,如果handles.roi1真的是这样创建的文件句柄fopen

handles.roi1 = fopen('test.jpg');

在这种情况下,您将在 MATLAB 中有一个真正的打开文件句柄,您应该首先关闭文件,fclose如下所示:

fclose(handles.roi1);

或者,如果您想关闭所有打开的文件fopen

fclose('all');

然后,当fclose您想摆脱roi1struct的字段handleshandles.roi1在 MATLAB 语法中)时,您可以使用rmfield这种方式(与 的情况相同imread):

handles = rmfield(handles, 'roi1');

handles它将没有字段的新副本存储roi1回名为handles.

于 2012-12-26T09:25:29.963 回答
0

如果只想删除部分句柄,可以按照上面说的做:

rmfield(handles, 'roi1');

如果要删除整个句柄,可以执行以下操作:

clear handles
于 2012-12-27T12:44:57.930 回答