Borrar filtros
Borrar filtros

draw a line on an image

186 visualizaciones (últimos 30 días)
Fatma Gargouri
Fatma Gargouri el 3 de Oct. de 2011
Comentada: Walter Roberson el 12 de En. de 2021
Hello
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

Respuesta aceptada

Fangjun Jiang
Fangjun Jiang el 3 de Oct. de 2011
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
  6 comentarios
Amber Elferink
Amber Elferink el 11 de En. de 2021
you have to do hold off at the end again (for next viewers)
Walter Roberson
Walter Roberson el 12 de En. de 2021
I suspect Sumit either wanted to know about getframe() https://www.mathworks.com/help/matlab/ref/getframe.html or else wanted to know how to draw a line directly into an array with the intent to save the array as an image but without having to display on the screen.
The easiest way to draw a line directly into an array is to use Computer Vision Toolbox insertShape()

Iniciar sesión para comentar.

Más respuestas (1)

David Young
David Young el 3 de Oct. de 2011
Perhaps your problem is that figure coordinates and array indices have different conventions. So, for example
imshow(im)
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.
  12 comentarios
Somsubhro Chaudhuri
Somsubhro Chaudhuri el 16 de Ag. de 2017
Editada: Somsubhro Chaudhuri el 16 de Ag. de 2017
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
Image Analyst el 16 de Ag. de 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.

Iniciar sesión para comentar.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by