2011-02-03 75 views
0

我使用guide創建了MATLAB中的GUI。到目前爲止,用戶可以導入圖像並保存圖像。我的下一步是允許用戶點擊圖像來放置一個圓/方塊,哪個更容易實現。理想情況下,我想這樣做,所創建的最新版本是可撤銷的,但基本實現是最重要的。在用戶指定的圖像上繪製圓圈/正方形

我假設使用PLOT的圓的實際繪圖會很好,正如其他幾個問題中提到的那樣。我不確定的是,我將如何獲取鼠標點擊圖像中的位置,然後將PLOT放置在該位置。


編輯: 這裏是代碼的主要位,我對目前的工作零件。

function V1Open_Callback(hObject, eventdata, handles) 
% hObject handle to V1Open (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
hMainGui = getappdata(0, 'hMainGui'); 
fileName = uigetfile('*.jpg'); 
setappdata(hMainGui, 'fileName', fileName); 
updateAxes1 

function updateAxes1 
hMainGui = getappdata(0, 'hMainGui'); 
fileName = getappdata(hMainGui, 'fileName'); 
imshow(imread(fileName)) 

% --- Executes on button press in V1Save. 
function V1Save_Callback(hObject, eventdata, handles) 
% hObject handle to V1Save (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
imsave; 

回答

0

我使用像imellipse和imrect圖像處理工具箱提供的功能來做到這一點:

有一個按鈕,用戶可以點擊開始舉行的橢圓形,這降低他們進入數字,並允許他們將和調整橢圓的大小。一旦他們完成調整大小,他們可以雙擊,你會得到結果。我傾向於存儲橢圓對象的句柄及其實際位置。

% --- Executes on button press in pushbutton1. 
function pushbutton1_Callback(hObject, eventdata, handles) 
axes(handles.axes1); 
if (isfield(handles, 'ellipse')) 
    delete(handles.ellipse); 
end 
handles.ellipse = imellipse(); 
handles.eps = getPosition(handles.ellipse); 
guidata(hObject, handles); 
2

您是否熟悉[x, y] = ginput?這是獲得用戶點擊鼠標位置的基本功能。有關更多詳情,請參閱here

您可能還想向我們展示您當前的代碼,以便我們能夠更具體地回答您的問題!

+0

嗨,感謝您的回覆,已添加上面代碼的主要部分。對MATLAB來說很陌生,所以不太熟悉。 – Ieuan 2011-02-03 21:44:18

3

這個問題是有點老,但你可以簡單地做到這一點,假設hAxes是你的形象的軸手柄:

Radius=0.5; 
xy1 = get(hAxes,'Currentpoint'); 
x1 = xy1(1,1); 
y1 = xy1(1,2); 
Rec=rectangle('Position',[x1-Radius,y1-Radius,2*Radius,2*Radius],'Curvature',[1,1],'HitTest','off'); 

您可以將半徑改變航向的任何價值。 get(hAxes,'Currentpoint')函數檢索相對於您的座標軸點擊的最後一個位置。將「曲率」設置爲1,1使矩形成爲一個圓...... 0,0將使它成爲矩形。

編輯:錯字