I have input values of x, y coordinates in the following format:
[[1,1], [2,1], [2,2], [1,2], [0.5,1.5]]
I want to draw polygons, but I don\'t
If you want to draw polygons on a matrix representing an image, scikit-image has 3 functions for you:
True
means the point is inside the polygon.polygon2mask()
.polygon()
would have let aside.Correct me if your benchmark said the contrary, but I think these functions are quite fast.
import numpy as np
from skimage.draw import polygon2mask, polygon, polygon_perimeter
shape = (10, 10) # image shape
points = [(5, -1), (-1, 5), (5, 11), (10, 5)] # polygon points
imgp2 = polygon2mask(shape, points).astype(str) # astype() converts bools to strings
imgp2[imgp2 == "True"] = "O"
imgp2[imgp2 == "False"] = "."
imgp = np.full(shape, ".") # fill a n*d matrix with '.'
imgpp = imgp.copy()
points = np.transpose(points) # change format to ([5, -1, 5, 10], [-1, 5, 11, 5])
rr, cc = polygon(*points, shape=shape)
imgp[rr, cc] = "O"
rr, cc = polygon_perimeter(*points, shape=shape, clip=True)
imgpp[rr, cc] = "O"
print(imgp2, imgp, imgpp, sep="\n\n")
Result:
[['.' '.' '.' '.' 'O' 'O' '.' '.' '.' '.']
['.' '.' '.' 'O' 'O' 'O' 'O' '.' '.' '.']
['.' '.' 'O' 'O' 'O' 'O' 'O' 'O' '.' '.']
['.' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O' '.']
['O' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O']
['O' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O']
['.' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O']
['.' '.' 'O' 'O' 'O' 'O' 'O' 'O' 'O' '.']
['.' '.' '.' 'O' 'O' 'O' 'O' 'O' '.' '.']
['.' '.' '.' '.' 'O' 'O' 'O' '.' '.' '.']]
[['.' '.' '.' '.' 'O' 'O' '.' '.' '.' '.']
['.' '.' '.' 'O' 'O' 'O' 'O' '.' '.' '.']
['.' '.' 'O' 'O' 'O' 'O' 'O' 'O' '.' '.']
['.' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O' '.']
['O' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O']
['O' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O']
['.' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O' 'O']
['.' '.' 'O' 'O' 'O' 'O' 'O' 'O' 'O' '.']
['.' '.' '.' 'O' 'O' 'O' 'O' 'O' '.' '.']
['.' '.' '.' '.' 'O' 'O' 'O' '.' '.' '.']]
[['.' '.' '.' '.' 'O' 'O' 'O' '.' '.' '.']
['.' '.' '.' 'O' '.' '.' '.' 'O' '.' '.']
['.' '.' 'O' '.' '.' '.' '.' '.' 'O' '.']
['.' 'O' '.' '.' '.' '.' '.' '.' '.' 'O']
['O' '.' '.' '.' '.' '.' '.' '.' '.' 'O']
['O' '.' '.' '.' '.' '.' '.' '.' '.' 'O']
['O' '.' '.' '.' '.' '.' '.' '.' '.' 'O']
['.' 'O' 'O' '.' '.' '.' '.' '.' '.' 'O']
['.' '.' '.' 'O' '.' '.' '.' 'O' 'O' '.']
['.' '.' '.' '.' 'O' 'O' 'O' '.' '.' '.']]