How to get all pixel coordinates in an area specified in an image in python?

你离开我真会死。 提交于 2021-02-07 04:09:39

问题


The area in image is defined by 4 coordinates x1,y1,x2,y2,x3,y3,x4,y4 and I want to retrieve all the pixel coordinates x,y inside that area.


回答1:


Assuming a rectangular shape, you can use np.mgrid to generate a coordinate matrix for the points between your top left and bottom right corners.

X, Y = np.mgrid[xmin:xmax, ymin:ymax]

and convert them to a bidimensional array of coordinates with

np.vstack((X.ravel(), Y.ravel()))

EDIT: arbitrary shapes

As Mark Setchell pointed out, there is nothing in your question that talks about rectangular shapes.

If you want to list all the points inside an arbitrary path, not necessarily of 4 vertices, you can use contains_points() from matplotlib Path.

Here's some code derived from another answer of mine

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.path import Path

import skimage.data

# path vertex coordinates
vertices = np.asarray([(100, 100),
                       (300,  80),
                       (350, 200),
                       ( 60, 150)])

# create dummy image
img = skimage.data.chelsea()

# from vertices to a matplotlib path
path = Path(vertices)
xmin, ymin, xmax, ymax = np.asarray(path.get_extents(), dtype=int).ravel()

# create a mesh grid for the whole image, you could also limit the
# grid to the extents above, I'm creating a full grid for the plot below
x, y = np.mgrid[:img.shape[1], :img.shape[0]]
# mesh grid to a list of points
points = np.vstack((x.ravel(), y.ravel())).T

# select points included in the path
mask = path.contains_points(points)
path_points = points[np.where(mask)]

# reshape mask for display
img_mask = mask.reshape(x.shape).T

# now lets plot something to convince ourselves everything works
fig, ax = plt.subplots()

# masked image
ax.imshow(img * img_mask[..., None])
# a random sample from path_points
idx = np.random.choice(np.arange(path_points.shape[0]), 200)
ax.scatter(path_points[idx, 0], path_points[idx, 1], alpha=0.3, color='cyan')



来源:https://stackoverflow.com/questions/50812749/how-to-get-all-pixel-coordinates-in-an-area-specified-in-an-image-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!