5

Nie mogę sprawić, że mój obraz będzie wyświetlał współrzędne mojego kursora myszy, a także używać ginput do zapisywania punktów w tym samym czasie.Jak wyświetlać współrzędne i używać ginput

Obecnie staram następujące:

MriHotrod = imread('Image.bmp'); 
Fig = figure('Name','BobDole'),... 
    imshow(Image, 'InitialMagnification', 250) 

axis on 
impixelinfo 

Image_1 = ginput(4) 

close BobDole 

ginput nadal działa, ale impixelinfo pozostaje stała

Pixel Info = (X, Y) Pixel Value 

Zdaję sobie sprawę z pewnych metod poruszania się, ale obejmują one funkcji . Wydaje się, że jest to raczej prosty problem, który może ominąć użycie funkcji.

Odpowiedz

4

Jeśli wpiszesz edit ginput i przejdź do linii 238-owski, zobaczysz

% Adding this to enable automatic updating of currentpoint on the figure 
set(fig,'WindowButtonMotionFcn',@(o,e) dummy()); 

Innymi słowy, ginput ustawia WindowButtonMotionFcn na rysunku. Domyślam się, że impixelinfo również używa tej funkcji, więc zostaje wyłączone, jak tylko zostanie wywołana ginput.

Rzeczywiście, w impixelinfoval (funkcja używana przez impixelinfo) znajdujemy wokół linia 83:

callbackID = iptaddcallback(hFig,'WindowButtonMotionFcn', @displayPixelInfo); 

Najdziwniejsze jest wtedy: jak to się zresetować po kliknięciu 4 punkty?

Ta magia jest realizowane przez linię 222-owski z ginput:

initialState.uisuspendState = uisuspend(fig); 

Najwyraźniej uisuspend jest trochę funkcja nieudokumentowana, który jest używany do zawieszenia jakiekolwiek istniejące wcześniej WindowButton* funkcje, w celu zresetowania je później. Tak więc, jeśli skomentować tę linię

%initialState.uisuspendState = uisuspend(fig); 

i zapisać ginput i ponownie wykonać całą rzecz, widzisz żądane zachowanie.

Zobaczysz także, dlaczego te funkcje zostają zawieszone - z przyczyn, których nie rozumiem, wszystko staje się niepraktycznie wolne, gdy włączone są dwie takie funkcje.

+0

Dziękuję za odpowiedź, niestety nasze funkcje ginput muszą być bardzo różne, ponieważ żadna z linii, o których wspomniałeś, nie jest w mojej funkcji ginput. Próbowałem skomentować to: state = uisuspend (rys.) Pojawia się w linii 92. To jednak nie działało. – Shinobii

+0

Jaką wersję Matlab masz? –

+0

Wersja: 7.10.0 R2010a – Shinobii

Powiązane problemy