Issue with imdistline() function in MATLAB?

7 vues (au cours des 30 derniers jours)
Eric Nunes
Eric Nunes le 22 Oct 2014
I am trying to measure the distance two points on an image and then use that distance as an input for some other function. Here is my code:"
if true
figure, imshow(I);
h = imdistline(gca);
api = iptgetapi(h);
width = api.getDistance();
end
When I run it, I am able to drag and get the distance I want on the image, but the distance I get from using the getDistance is some default value it started with , when it opened and it does not change , even if I change it in the image. How can the variable width have the distance i measured before I press enter or any eye and close the image.
Eric
  1 commentaire
Brett Barnes
Brett Barnes le 22 Avr 2016
Are you right clicking the line to open the context menu? There's an option there to "Export to Workspace"

Connectez-vous pour commenter.

Réponses (2)

Image Analyst
Image Analyst le 23 Oct 2014
I ran your code on R21014b and it works just fine - exactly how you'd expect. I think you'll have to call tech support.

Roche de Guzman
Roche de Guzman le 30 Jan 2021
global h; h = imdistline; % activates the fx for drawing and measuring line
global xc yc; xc = 0.3; yc = 0.1; % x and y conversion factors
setLabelTextFormatter(h,'measure'); % message
addNewPositionCallback(h,@ShowDistance); % new position callback
%% Custom fx
function ShowDistance(pos)
global h xc yc; % sets line handles and x and y conversion factors to global
X = pos(:,1)*xc; Y = pos(:,2)*yc; % converts x and y positions from px to target unit
d = norm(diff([X Y])); % distance in target unit
assignin('base','d',d); % stores in Workspace
setLabelTextFormatter(h,[num2str(d,'%.1f') ' target unit']); % updates measurement
end

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by