2010-12-01 2 views

Antwort

2

Wenn Sie der Benutzer möchte auf einem Grundstück oder ein Bild klicken und die Koordinaten, wo sie angeklickt, können Sie ginput verwenden. Zum Beispiel

[x,y] = ginput(1); 

geben Ihnen die Koordinaten von einem Klick. Sie können dann Ihre eigene Logik verwenden, um herauszufinden, welches Objekt dem entspricht.

Wenn dies nicht das ist, was Sie versuchen, müssen Sie dies deutlicher erklären.

+0

danke für die Antwort ... Ja ich der Benutzer auf das Bild klicken möchten (ein beliebiges Objekt im Bild) und die Koordinaten, wo sie klicken ... Wenn ich diese Koordinaten bekommen kann ich werde versuchen, um die Ginput-Funktion anzuwenden ... Vielen Dank – zenab

+0

Entschuldigung für diesen Fehler ... Ich werde meine Frage fortsetzen ... Wenn ich die Objektkoordinaten bekomme kann ich mit diesem Objekt als ein Bild behandeln? – zenab

+0

Ich habe die Frage zur Veranschaulichung bearbeitet. –

2

Ich bin mir nicht sicher, ob dies Ihre Frage beantwortet, aber Grundstück Objekte (das heißt lines, patches, images, etc.) haben einen ButtonDownFcn Rückruf, der ausgeführt wird, wenn Sie eine Maustaste drücken, während sich der Mauszeiger über das Objekt.

Hier ist ein einfaches Beispiel (unter Verwendung von nested functions und function handles), wie Sie ButtonDownFcn Rückrufe nutzen könnten Informationen über die ausgewählten Objekte zu erhalten. Zuerst speichern Sie diese Funktion in einer m-Datei:

function colorFcn = colored_patches 

    selectedColor = [1 0 0]; %# The default selected color 

    figure;         %# Create a new figure 
    axes;         %# Create a new axes 
    patch([0 0 1 1],[0 1 1 0],'r',...  %# Plot a red box 
     'ButtonDownFcn',@patch_callback); 
    hold on;         %# Add to the existing plot 
    patch([2 2 4 4],[1 2 2 1],'g',...  %# Plot a green box 
     'ButtonDownFcn',@patch_callback); 
    patch([1 1 2 2],[3 4 4 3],'b',...  %# Plot a blue box 
     'ButtonDownFcn',@patch_callback); 
    axis equal;        %# Set axis scaling 

    colorFcn = @get_color; %# Return a function handle for get_color 

%#---Nested functions below--- 

    function patch_callback(src,event) 
    selectedColor = get(src,'FaceColor'); %# Set the selected color to the 
              %# color of the patch clicked on 
    end 

    function currentColor = get_color 
    currentColor = selectedColor;   %# Return the last color selected 
    end 

end 

nächstes den obigen Code ausführen und die zurückFunktionsGriff in einer Variablen speichern:

colorFcn = colored_patches; 

Dieses eine Figur mit 3 farbigen Feldern schaffen , etwa so:

alt text

Nun, wenn Sie die Maus über einen der farbigen Kästchen klicken, wird die Ausgabe von colorFcn wird chan ge:

%# Click the red box, then call colorFcn 
>> colorFcn() 
ans = 
    1  0  0 %# Returns red 

%# Click the blue box, then call colorFcn 
>> colorFcn() 
ans = 
    0  0  1 %# Returns blue 

%# Click the green box, then call colorFcn 
>> colorFcn() 
ans = 
    0  1  0 %# Returns green 
+0

Vielen Dank für die Antwort ... aber das nicht für meine Frage zu beantworten .... Ich segmentieren das Bild basierend auf Objekte, dann zeige ich dem Benutzer seine Bildsegmentierung, damit der Benutzer jedes Objekt in auswählen kann das Bild (durch Klicken auf das Objekt, das er mag), in diesem Fall muss ich die Information des Objekts, das der Benutzer ausgewählt hat, nehmen, um meine Verarbeitung abhängig von diesem Objekt zu machen – zenab