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

私のポリゴン番号は浮動小数点型です。どうすればいいですか? –

関連する問題