MATLAB Answers


draw a line on an image

Asked by Fatma Gargouri on 3 Oct 2011
Latest activity Commented on by Sumit Nishar on 22 Oct 2019 at 3:17
I want draw a line on an image, just by giving the coordinates of the extremities.
I tryed the function line(...) but it didn't give me the right result


Sign in to comment.


2 Answers

Fangjun Jiang
Answer by Fangjun Jiang
on 3 Oct 2011
 Accepted Answer

Pay attention of the syntax of line().
line([x1,x2],[y1,y2]), not line([x1,y1],[x2,y2]);
figure(1);line([0 1],[0 1]); will show a line
figure(2);line([0 0],[1 1]); won't show a line


Show 1 older comment
Fangjun Jiang on 3 Oct 2011
use "hold on"
thank you :))
Sumit Nishar on 22 Oct 2019 at 3:17
then how to save the image after hold on its unable to save the image

Sign in to comment.

David Young
Answer by David Young
on 3 Oct 2011

Perhaps your problem is that figure coordinates and array indices have different conventions. So, for example
line([50 100], [30 30])
draws a line from im(30, 50) to im(30, 100).
Arrays are indexed by (ROW,COLUMN). Positions in a figure are addressed by (X,Y). When you display an array as an image, using the usual conventions, ROW corresponds to Y and COLUMN corresponds to X.


Image Analyst
on 15 Aug 2017
Of course. Just hard-code in the x and y values of the endpoints of the line.
Thank you @Image Analyst. I managed doing that now. I now have a binary image with a line between two points (attached). Could you please suggest a way to only change the area right below the line to black?
I was thinking of defining the equation of the line, and then running a for loop to cover these pixels, but I want to enquire about a shorter way of doing this as I'll have to run this code for a very large number of images.
Thank you! Regards, Somsubhro
Image Analyst
on 16 Aug 2017
You could take the endpoints of the line, then add on the bottom of the image coordinates, then call poly2mask() to get a binary image mask. Then use that to erase the image in that quadrilateral.

Sign in to comment.