2017-02-11 53 views
2

다각형 안쪽/바깥쪽에있는 모든 점이 참/거짓이되도록 마스크 배열로 바꾸려는 다각형이 있습니다. 나는 완벽한 솔루션 (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)은 나에게 볼록한 선체의 가장자리 점을 주며, 나는이 선체 다각형을 이제는 마스크로 바꾸기를 원합니다.

답변

4

poly은 튜플 목록 또는 병합 목록이어야합니다. 어떤 이유로 numpy 배열이 잘못 처리됩니다. 다각형 배열의 폴리곤을 poly.ravel().tolist() 또는 list(map(tuple, poly))으로 변환 할 수 있습니다.

+0

감사합니다. – flotzilla

+0

다각형 번호가 부동 소수점 형식으로되어 있습니다. 어떻게해야합니까? –