Adding index to a function.
Ältere Kommentare anzeigen
Hello, I am trying to add an index to a function. I have an ROI on an image. Each time the ROI moves on the image, I want the index to increase by 1. So when I move the ROI for a fourth time i want the index to be equal to 4. I have the index sum = 0, and then when the ROI moves I say sum = sum+1;. However, when I do this, the function repeats and just sets the sum = 0, and so the sum is always equal to 1, instead of increasing by integer values. Does anyone have an idea on how to fix this. I tried putting the sum = 0 line on the outside of the function but then the function doesn't know what sum is and it is undefined.
clear
clc
I = imread('air.jpg');
I = rgb2gray(I);
I = im2double(I);
imshow(I)
roi = drawrectangle('Color','r');
addlistener(roi,'MovingROI',@allevents)
addlistener(roi,'ROIMoved',@allevents)
function allevents(src,evt)
evname = evt.EventName;
I = imread('air.jpg');
I = rgb2gray(I);
I = im2double(I);
sum = 0;
switch(evname)
case{'MovingROI'}
%donothing for now
case{'ROIMoved'}
sum = sum+1
disp(['ROI moved previous position: ' mat2str(evt.PreviousPosition)]);
disp(['ROI moved current position: ' mat2str(evt.CurrentPosition)]);
end
end
Akzeptierte Antwort
Weitere Antworten (1)
You could also have used a persistent variable.
function allevents(src,evt)
persistent accum
if isempty(accum), accum=0; end %first time called
evname = evt.EventName;
I = imread('air.jpg');
I = rgb2gray(I);
I = im2double(I);
switch(evname)
case{'MovingROI'}
%donothing for now
case{'ROIMoved'}
accum = accum+1
disp(['ROI moved previous position: ' mat2str(evt.PreviousPosition)]);
disp(['ROI moved current position: ' mat2str(evt.CurrentPosition)]);
end
end
2 Kommentare
Kevin P Meyer
am 7 Okt. 2021
Matt J
am 8 Okt. 2021
Yes, you can make any variable a persistent variable.
Kategorien
Mehr zu Scripts finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!