图像中的区域由4个坐标x1,y1,x2,y2,x3,y3,x4,y4
定义,我想检索该区域内的所有像素坐标x,y
。
答案 0 :(得分:1)
假设是矩形,您可以使用https://embed.plnkr.co/F3t6gI8TPUZwCOnA/为左上角和右下角之间的点生成坐标矩阵。
X, Y = np.mgrid[xmin:xmax, ymin:ymax]
并将它们转换为带有
的二维坐标数组np.vstack((X.ravel(), Y.ravel()))
编辑:任意形状
正如Mark Setchell指出的那样,你的问题中没有任何关于矩形形状的讨论。
如果要列出任意路径内的所有点,不一定是4个顶点,可以使用contains_points()
np.mgrid
中的matplotlib
。
以下是从Path
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')