2016-09-20 29 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 

上面的代碼工作很好地與下面的問題。如果我刪除一個矩形(一個或多個),然後下面的錯誤出現?

**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; 

無關的問題,但有一天可能會救你拔頭髮的時間:不要使用i作爲變量,因爲它是MATLAB中的虛構單元。

+0

代碼不運行,因爲ishandle總是返回0,所以我在if條件中使用了negation。但是當我刪除了一個矩形「刪除的對象」時出現了同樣的錯誤 –

+0

我沒有圖像工具箱來測試,但這個想法應該是正確的。你可以用'isvalid'來代替嗎? (以防萬一是一個繼承'handle'類的對象) – 2016-09-20 11:12:04

+0

恐怕這個想法只有當我捕捉到刪除矩形時觸發的事件纔有效。 –

相關問題