2017-02-11 136 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

我的多邊形數字是浮動類型我應該怎麼做? –