2017-02-11 137 views
2

我有一个多边形,我想变成一个蒙版数组,这样多边形内/外的所有点都是True/False。我以为我找到了完美的解决方案(SciPy Create 2D Polygon Mask),但由于某种原因,这不起作用!python:将多边形转换为蒙版数组

我在做什么错?

#!/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)给我凸包的边缘点,这是我现在想变成面具的这个船体多边形。

回答

4

poly必须是元组列表或展开列表。由于某些原因,numpy数组处理得不好。你可以使用poly.ravel().tolist()list(map(tuple, poly))将一个numpy数组中的多边形转换。

+0

谢谢你呢! – flotzilla

+0

我的多边形数字是浮动类型我应该怎么做? –