2017-04-07 7 views
1

2つの軸に2つの画像があり、ginputを使用してシードポイントを選択すると、どちらの軸でも選択できるサンプルGUIコードが添付されますそこに、特定の軸シンプルポイントを選択するためにginputを現在の軸に限定する方法

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

img1 = imread('peppers.png'); 
img2 = imread('rice.png'); 

axes(handles.axes1); 
imshow(img1,[]); 
axes(handles.axes2); 
imshow(img2,[]); 


% --- Executes on button press in seedpointSelect. 
function seedpointSelect_Callback(hObject, eventdata, handles) 
% hObject handle to seedpointSelect (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
global img1; 
global img2; 
global x; 
global y; 

axes(handles.axes1); 
imshow(img1,[]); 
[y,x] = ginput(handles.axes1); 
y = round(y); x = round(x); 
set(handles.xcord,'String',num2str(x)); 
set(handles.ycord,'String',num2str(y)); 

に特定の軸に関数ginputを制限する上で任意のヘルプを関数ginputを制限する

おかげで、 Gopi

答えて

0

ginputを使用しないでください、マウスクリックのコールバックを作成して、とにかく代わりに(ButtonDownFcn)。たとえば、軸からコールバック関数を削除するようにコールバックを設定できます。コールバックを設定するメインプログラムでは、そのプロパティを変更するにはwaitforです。ユーザーがクリックするとすぐにコントロールが戻され、最後のマウスクリック(CurrentPoint)の場所を読み取ることができます。読み込んだ位置は、画面のピクセルではなく軸の座標にあることに注意してください。これは良いことであり、表示される画像のピクセルに対応する可能性が最も高いです。

あなたはより良いアプローチは、しかし、あなたがより多くの制御を超える持っているように ButtonDownFcnを使用することです ginput

set(handles.axes2, 'Hittest', 'off') 

からクリックを無視するaxesHitTestプロパティを変更することができるように使用されるMATLABの古いバージョンでは

0

axesオブジェクトを持つマウスイベントです。

あなたOpeningFcn

set(handles.axes1, 'ButtonDownFcn', @mouseCallback) 

内から次に、コールバック関数

function mouseCallback(src, evnt) 
    handles = guidata(src); 

    % Get the current point 
    xyz = get(src, 'CurrentPoint'); 

    x = xyz(1,1); 
    y = xyz(1,2); 

    % Store x/y here or whatever you need to do 
end 
を作成する必要があります