編集: 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 コマンドがいくつかあります。imread
xlsread
fastaread
この場合、 (MATLAB 構文で)roi1
構造体のフィールドを削除する必要があるため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');
次に、( MATLAB 構文で)構造体fclose
のフィールドを削除したい場合は、次の方法を使用できます(の場合と同じ):roi1
handles
handles.roi1
rmfield
imread
handles = rmfield(handles, 'roi1');
handles
これは、フィールドなしでの新しいコピーをroi1
と呼ばれる同じ構造体に戻して格納しhandles
ます。