編集: OPによって追加された情報と一致するように回答を書き直しました。
handles.roi1で作成された場合imread:
handles.roi1 = imread('test.jpg');
または、最初に変数にコンテンツを格納してaからコピーを作成しますa(handles.roi1この場合、同じデータの 2 つのコピーがあります)。
a = imread('test.jpg');
handles.roi1 = a;
開いているファイル ハンドルはありません。さらに、aとhandles.roi1は等しいであり、これらはファイル ハンドルではありませんが、それぞれにグラフィック ファイルのカラーまたはグレースケール イメージが含まれていますtest.jpg(この例の場合)。
MATLAB では通常、 でファイル ハンドルを取得しますが、ファイル ハンドルを使用しないfopenファイル I/O コマンドがいくつかあります。imreadxlsreadfastaread
この場合、 (MATLAB 構文で)roi1構造体のフィールドを削除する必要があるためhandles( handles.roi1MATLAB 構文で)、次のように使用できますrmfield。
handles = rmfield(handles, 'roi1');
handlesこれは、フィールドなしでの新しいコピーをroi1と呼ばれる同じ構造体に戻して格納しhandlesます。
これは、ファイル ハンドルやグラフィックス オブジェクト ハンドルとは関係がないことに注意してください。ファイル ハンドル (またはグラフィックス オブジェクト ハンドル) をまったく返さないという事実にもかかわらず、handlesあなたまたは誰かが name と紛らわしい名前を持っていると呼ばれる構造体にすぎません! の代わりに名前を付けたいと思います。それが実際に含まれているからです。handlesimreadimageDatahandles
一方、handles.roi1本当に次のように作成されたファイル ハンドルであった場合fopen:
handles.roi1 = fopen('test.jpg');
この場合、MATLAB に実際に開いているファイル ハンドルがあり、最初に次のfcloseようにファイルを閉じる必要があります。
fclose(handles.roi1);
または、 で開いたすべての開いているファイルを閉じたい場合は、次のようにしますfopen。
fclose('all');
次に、( MATLAB 構文で)構造体fcloseのフィールドを削除したい場合は、次の方法を使用できます(の場合と同じ):roi1handleshandles.roi1rmfieldimread
handles = rmfield(handles, 'roi1');
handlesこれは、フィールドなしでの新しいコピーをroi1と呼ばれる同じ構造体に戻して格納しhandlesます。