2011-02-03 1 views
0

J'ai une interface graphique dans MATLAB créée en utilisant guide. Jusqu'à présent, l'utilisateur peut importer une image et enregistrer l'image. Ma prochaine étape est de permettre à l'utilisateur de cliquer sur l'image pour placer un cercle/carré, peu importe lequel, le plus facile à implémenter. Idéalement, je voudrais faire en sorte que le dernier créé soit annulable, mais la mise en œuvre de base est primordiale.Dessin de cercles/carrés sur une image où l'utilisateur spécifie

Je suppose que pour le dessin actuel du cercle, l'utilisation de PLOT va bien, comme mentionné dans plusieurs autres questions. Ce dont je ne suis pas sûr, c'est comment je vais obtenir l'emplacement dans l'image du clic de la souris pour ensuite placer la parcelle à cet endroit.


EDIT: Voici le bit principal de code que j'ai pour les pièces de travail en ce moment.

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; 

Répondre

0

-je utiliser la boîte à outils de traitement d'images fournies fonctions comme imellipse et imrect faire ceci:

ont un bouton, l'utilisateur peut cliquer pour commencer à placer l'ellipse, ce qui les laisse tomber dans la figure et leur permet de placer et taille l'ellipse. Une fois qu'ils ont fini de le redimensionner, ils peuvent double-cliquer et vous obtenez les résultats. J'ai tendance à stocker une poignée à l'objet ellipse, et sa position réelle.

% --- 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

Connaissez-vous le [x, y] = ginput? C'est la fonction fondamentale pour obtenir la position où votre utilisateur a cliqué sur la souris. Pour plus de détails peuvent être trouvés par exemple here.

Vous pouvez également nous montrer votre code actuel, afin que nous puissions répondre à votre question de manière plus spécifique!

+0

Salut merci pour la réponse, ont ajouté la partie principale du code ci-dessus. Je suis nouveau à MATLAB donc pas très familier avec beaucoup. – Ieuan

3

Cette question est un peu vieux, mais vous pouvez simplement ce faire, en supposant hAxes est la poignée des axes de votre image:

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'); 

Vous pouvez modifier bien sûr le rayon à toute valeur. La fonction get (hAxes, 'Currentpoint') récupère le dernier endroit où vous avez cliqué par rapport à vos axes. la 'courbure' fixée à 1,1 fait du rectangle un cercle ... 0,0 le laissera être un rectangle bien sûr.

edit: typo