Adding index to a function.
Mostra commenti meno recenti
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
Risposta accettata
Più risposte (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 Commenti
Kevin P Meyer
il 7 Ott 2021
Matt J
il 8 Ott 2021
Yes, you can make any variable a persistent variable.
Categorie
Scopri di più su Scripts in Centro assistenza e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!