我有一个多边形我想变成一个蒙版数组,这样所有落在多边形内/外的点都是True / False。我以为我找到了完美的解决方案(SciPy Create 2D Polygon Mask),但由于某种原因,这不起作用!
我做错了什么?
#!/usr/bin/env python3
import numpy as np
import scipy as sp
from PIL import Image, ImageDraw
nx, ny = 10, 10
poly = np.array([(1, 1), (6, 2), (9, 9), (3, 7)])
img = Image.new("L", [nx, ny], 0)
ImageDraw.Draw(img).polygon(poly, outline=1, fill=1)
mask = np.array(img)
print(mask)
# [[1 0 0 0 0 0 0 0 0 0]
# [0 0 0 0 0 0 0 0 0 0]
# [0 0 0 0 0 0 0 0 0 0]
# [0 0 0 0 0 0 0 0 0 0]
# [0 0 0 0 0 0 0 0 0 0]
# [0 0 0 0 0 0 0 0 0 0]
# [0 0 0 0 0 0 0 0 0 0]
# [0 0 0 0 0 0 0 0 0 0]
# [0 0 0 0 0 0 0 0 0 0]
# [0 0 0 0 0 0 0 0 0 0]]
更广泛的背景:
我在矩形网格上使用任意形状的特征。我有网格上所有边界点的索引,我想要这个特征周围的凸包的索引。 scipy.spatial.ConvexHull(boundary_points)
给了我凸包的边缘点,正是这个船体多边形我现在想变成一个面具。
答案 0 :(得分:5)
poly
必须是元组列表或扁平列表。由于某种原因,numpy数组处理得很糟糕。您可以使用poly.ravel().tolist()
或list(map(tuple, poly))
转换numpy数组中的多边形。