Adding index to a function.
Afficher commentaires plus anciens
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
Réponse acceptée
Plus de réponses (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 commentaires
Kevin P Meyer
le 7 Oct 2021
Matt J
le 8 Oct 2021
Yes, you can make any variable a persistent variable.
Catégories
En savoir plus sur Scripts dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!