2011-02-03 26 views
0

guideを使用して作成したMATLABのGUIがあります。これまでのところ、ユーザーはイメージをインポートしてイメージを保存できます。私の次のステップは、ユーザが画像をクリックして円/四角を配置できるようにすることですが、どちらを実装するのが簡単かは関係ありません。理想的には、作成した最新のものを元に戻すことができますが、基本的な実装が最も重要です。ユーザーが指定した画像に円/四角形を描く

私は、PLOTを使用する円の実際の描画が、他のいくつかの質問で言及されているように、うまくいくと仮定しています。私がよく分からないのは、マウスをクリックした画像内の位置を取得してその場所にPLOTを配置する方法です。


EDIT: ここで私は、現時点では作業の部分を持っているコードの主なビットです。

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を参照してください。

あなたの質問にもっと具体的に答えることができるように、現在のコードをinorderで表示することもできます。

+0

返信いただきありがとうございます。上記のコードの主要部分が追加されました。 MATLABの新機能で、あまり慣れていない – Ieuan

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に設定された 'curvature'は、矩形を円にします... 0,0は、それをもちろん矩形にします。

編集:typo

関連する問題