【问题标题】:python: turn polygon into mask arraypython:将多边形转换为掩码数组
【发布时间】:2017-06-29 19:58:42
【问题描述】:

我有一个多边形,我想把它变成一个掩码数组,这样所有落在多边形内/外的点都是真/假。我以为我找到了完美的解决方案 (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) 给了我凸包的边缘点,我现在想把这个包多边形变成蒙版。

【问题讨论】:

    标签: python numpy scipy python-imaging-library point-in-polygon


    【解决方案1】:

    poly 必须是元组列表或扁平列表。由于某种原因,numpy 数组处理不当。您可以使用poly.ravel().tolist()list(map(tuple, poly)) 转换numpy 数组中的多边形。

    【讨论】:

    • 我的多边形数是浮点数我该怎么办?
    猜你喜欢
    • 2020-03-12
    • 2018-06-11
    • 2022-10-18
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    相关资源
    最近更新 更多