编辑:重写答案以匹配 OP 添加的信息。
如果handles.roi1
是用创建的imread
:
handles.roi1 = imread('test.jpg');
或者,首先将内容存储在变量中a
,然后复制a
into handles.roi1
(在这种情况下,您有 2 个相同数据的副本):
a = imread('test.jpg');
handles.roi1 = a;
然后没有打开的文件句柄。此外,a
和handles.roi1
相等,它们不是文件句柄,但它们中的每一个都包含图形文件的彩色或灰度图像(在本例中)。test.jpg
在 MATLAB 中,您通常使用 获取文件句柄fopen
,但有几个文件 I/O 命令不使用文件句柄,例如imread
,xlsread
并且fastaread
不使用文件句柄。
在这种情况下,您想要(我假设)是摆脱roi1
struct的字段handles
(handles.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
您想摆脱roi1
struct的字段handles
(handles.roi1
在 MATLAB 语法中)时,您可以使用rmfield
这种方式(与 的情况相同imread
):
handles = rmfield(handles, 'roi1');
handles
它将没有字段的新副本存储roi1
回名为handles
.