2016-09-20 3 views
0

ロードボタンを使用してイメージをロードするコードを作成した後、描画ボタンを使用してイメージに異なる四角形を描画し、テキストファイル。イメージにドラッグ可能な四角形を追加して削除し、ファイルに保存する

私は自分の画像に3つのボタンを作っています。

1.load(それはGUI上の画像をロードします) 2.Draw(それにユーザーを押すことにより、画像上でドラッグ可能な四角形を描画することができるだろう。 3.Save(このボタンのユーザーを使用すると、保存することができるだろうテキストファイル内のすべての矩形)。

ロード

function loadButton_Callback(hObject, eventdata, handles) 
% hObject handle to loadButton (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
I=imread('http://ichef.bbci.co.uk/corporate2/images/width/live/p0/0l/3r/p00l3rnt.jpg/624'); 
imshow(I); 
rectangles=cell(1,1); 
count=0; 
handles.rectangles=rectangles; 
handles.count=count; 
guidata(hObject,handles); 

function drawButton_Callback(hObject, eventdata, handles) 
% hObject handle to drawButton (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
rectangles=handles.rectangles; 
count=handles.count; 
count=count+1; 
h=imrect; 
rectangles{count,1}=h; 
handles.count=count; 
handles.rectangles=rectangles; 
guidata(hObject,handles); 
を描きます

保存

function saveButton_Callback(hObject, eventdata, handles) 
% hObject handle to saveButton (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
rectangles=handles.rectangles; 
for i=1:length(rectangles) 
    dlmwrite('P:\bla.txt',rectangles{i}.getPosition,'-append','delimiter',' ','newline','pc'); 
end 

上記のコードは、私が長方形(複数可)を削除するには、次のproblem.Ifでうまく動作し、次のエラーがアップしますか!保存する前に

**Invalid or deleted object**. 

答えて

1

、あなたの矩形が有効なハンドルオブジェクト(つまり、削除されていない)であれば、あなたは確認する必要があります:

問題とは無関係の
function saveButton_Callback(hObject, eventdata, handles) 
     rectangles=handles.rectangles; 
     delete('P:\bla.txt'); 
     fclose(fopen('P:\bla.txt', 'w')); % To be able to append 
     for k=1:length(rectangles) 
       if isvalid(rectangles{k}) 
         dlmwrite(... 
          'P:\bla.txt', rectangles{k}.getPosition, ... 
          '-append',        ... 
          'delimiter', ' ',      ... 
          'newline', 'pc'       ... 
         ); 
       end; 
     end; 

が、1日には、あなたの髪引っ張っの時間を節約することがあります。変数としてiを使用しないでください。これはMATLABの虚数単位です。

+0

ishandleが常に0を返すので、コードは実行されません。私はif条件内で否定を使用しました。しかし、矩形「削除されたオブジェクト」を削除すると同じエラーが表示されました。 –

+0

私はテストする画像ツールボックスしかし、アイデアは正しいはずです。代わりに 'isvalid'を試すことができますか? (ちょうど 'handle'クラスを継承するオブジェクトの場合) –

+0

このアイデアは、長方形を削除する際に発生するイベントを捕捉した場合にのみうまくいくのではないかと心配しています。 –

関連する問題