如何在Python中获取多边形内的点列表?

2023-12-21

我进行了很多搜索,但找不到我的问题的任何实际答案。我有一个多边形。例如:

    [(86, 52), (85, 52), (81, 53), (80, 52), (79, 48), (81, 49), (86, 53),
     (85, 51), (82, 54), (84, 54), (83, 49), (81, 52), (80, 50), (81, 48),
     (85, 50), (86, 54), (85, 54), (80, 48), (79, 50), (85, 49), (80, 51),
     (85, 53), (82, 49), (83, 54), (82, 53), (84, 49), (79, 49)]

我想获取此边界多边形内所有点的列表。我听说过很多有关多边形三角测量技术或线性/洪水/交叉/...填充算法的信息。但我真的无法想出一种有效的方法来实现这一点。这个多边形很小,想象一个有 10 亿个点的多边形。我现在使用 PIL 绘制多边形来用红色填充多边形,并在其中循环以查找红点。这是一种非常慢的技术:

def render(poly, z):
    xs = [i[0] for i in poly]
    ys = [i[1] for i in poly]
    minx, maxx = min(xs), max(xs)
    miny, maxy = min(ys), max(ys)
    X = maxx - minx + 1
    Y = maxy - miny + 1
    newPoly = [(x - minx, y - miny) for (x, y) in polygons]
    i = Image.new("RGB", (X, Y))
    draw = ImageDraw.Draw(i)
    draw.polygon(newPoly, fill="red")
    # i.show()
    tiles = list()
    w, h = i.size
    print w, h
    for x in range(w):
        for y in range(h):
            data = i.getpixel((x, y))
            if data != (0, 0, 0):
                tiles.append((x + minx, y + miny))

    return tiles

我正在寻找解决这个问题的 Pythonic 方法。 谢谢你们。


我建议使用 matplotlib包含点() https://matplotlib.org/api/path_api.html#matplotlib.path.Path.contains_points

from matplotlib.path import Path

tupVerts=[(86, 52), (85, 52), (81, 53), (80, 52), (79, 48), (81, 49), (86, 53),
 (85, 51), (82, 54), (84, 54), (83, 49), (81, 52), (80, 50), (81, 48),
 (85, 50), (86, 54), (85, 54), (80, 48), (79, 50), (85, 49), (80, 51),
 (85, 53), (82, 49), (83, 54), (82, 53), (84, 49), (79, 49)]


x, y = np.meshgrid(np.arange(300), np.arange(300)) # make a canvas with coordinates
x, y = x.flatten(), y.flatten()
points = np.vstack((x,y)).T 

p = Path(tupVerts) # make a polygon
grid = p.contains_points(points)
mask = grid.reshape(300,300) # now you have a mask with points inside a polygon
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中获取多边形内的点列表? 的相关文章

  • 如何从本地模式下运行的 pyspark 中的 S3 读取数据?

    我正在使用 PyCharm 2018 1 使用 Python 3 4 并通过 virtualenv 中的 pip 安装 Spark 2 3 本地主机上没有安装hadoop 因此没有安装Spark 因此没有SPARK HOME HADOOP
  • 打乱列表并返回副本

    我想对数组进行洗牌 但我找到的只是类似的方法random shuffle x from 在 Python 中随机化字符串列表的最佳方法 https stackoverflow com questions 1022141 best way t
  • 将 c++ 异常传播到 cython - python 异常

    我的 Cython 0 17 1 有问题 我的函数抛出一个std runtime error如果文件不存在 我想以某种方式将此异常传播到我的 Cython 代码 void loadFile const string filename som
  • 字符串在内部存储为单独的字符,内存中的每个字符都由其他类似的字符串共享吗?

    例如 是字符串var1 ROB 存储为 3 个内存位置 R O 和 B 每个位置都有自己的地址和变量var1指向内存位置R 那它怎么指向O和B呢 并执行其他字符串 例如 var2 BOB 指向内存中相同的 B 和 Ovar1指的是 字符串如
  • 如何将二维数组作为 multiprocessing.Array 传递给 multiprocessing.Pool?

    我的目标是将父数组传递给mp Pool并填充它2s 同时将其分发到不同的进程 这适用于一维数组 import numpy as np import multiprocessing as mp import itertools def wor
  • 字符串中数字的连续相加

    我是一名正在学习 python 的新程序员 并且在如何完成此任务方面遇到了困难 所以本质上我有一个从文件导入的数字字符串需要读取 并且需要将第一个数字的总和添加到第二个数字并将其转换为正确的 ascii 字符 因此 例如 如果我正在读取字符
  • python解释器自动重启而不返回答案

    调用递归函数时 python解释器会自动重新启动吗 我正在编写一个快速排序算法 并尝试对一个大的数字数组 顺序 10 4 进行排序 但是当我尝试对整个数组进行排序时 python 正在重新启动 即给我 重新启动 并且存储在内存中的所有值 函
  • 组内条件计数

    我想在之后进行条件计数groupby 例如 按列的值分组A 然后计算每组中值出现的频率5出现在列中B 如果我整个过程都这样做DataFrame 只是len df df B 5 所以我希望我能做到df groupby A df B 5 siz
  • 无法启动 Windows 快捷方式

    我正在尝试使用 python 启动 Windows 我已经尝试了 os system subprocess call os startfile 等多种方法 但总是收到错误消息 指出路径不存在 我知道路径是正确的 因为我尝试在 CMD EXE
  • [matplotlib]:理解“set_ydata”方法

    我试图了解如何使用 set ydata 方法 我在 matplotlib 网页上找到了很多示例 但我只找到了 set ydata 被 淹没 在大型且难以理解的代码中的代码 我想要一个简短且易于理解的代码来帮助我理解 set ydata 的工
  • 获取每行最后 150 行中所有正值的计数 - pandas

    我有以下数据集 其中有列Date and Values对于每一行 它两者都有 ve and ve价值观 我必须计算最后 150 行的所有正值 在每一行 因此前 150 行将具有空值 然后 以下行将具有最后 150 行的计数 ve行 类似地
  • Python 中 Matlab 'fscanf' 的等价物是什么?

    Matlab函数fscanf 似乎很强大 python 或numpy 中是否有相同的等效项 具体来说 我想从文件中读取矩阵 但我不想迭代每一行来读取矩阵 类似的东西 来自 matlab 用于读取 2D 1000x1000 矩阵 matrix
  • 如何在Python Selenium中获取WebElement的类名?

    我使用 Selenium WebDriver 来抓取从网页中获取的 用 JavaScript 编写的表格 我正在迭代表行列表 每行可能属于不同的类别 我想获取此类的名称 以便我可以为每一行选择适当的操作 table body table f
  • 在Python中将数组的元素从科学记数法转换为十进制记数法

    我有一个 numpy 数组 其元素采用科学格式 我想将它们转换为十进制格式 我的 numpy 数组如下所示 array 93495052 96955582 98555123 06146193 array 1 00097681e 09 9 9
  • Django Rest框架Json解析

    我想解析传入的POSTdjangoviews py 文件中的数据 发布数据 number 17386372 data banana apple grapes 这是我尝试读取上述传入数据的方法request views py class Fr
  • Django Admin Media 前缀 URL 问题

    我有以下文件夹结构 src BAT templates admin base html src BAT media base css src BAT media admin media base css 设置 py MEDIA ROOT o
  • 如果出现重复,则主键取正值

    我有一个数据框df Key1 Key2 Value K11 K21 V1 K11 K21 V1 K13 K23 V2 K13 K23 V2 现在 例如对于相同的键 K11 K21 组合 我们有 2 个值 一负一正 如何从此 df 中仅获取正
  • 广度优先搜索:检查访问状态的时机

    在有向图的广度优先搜索中 可能循环 当一个节点出队时 其所有尚未访问的子节点都会入队 并且该过程将继续 直到队列为空 有一次 我以相反的方式实现它 将节点的所有子节点排队 并在节点出队时检查访问状态 如果正在出队的节点之前已被访问过 则该节
  • 子进程调用,它们是并行完成的吗?

    我一直在谷歌搜索这个问题的答案 但似乎没有一个答案 谁能告诉我如果subprocess模块是否并行调用 Python 文档建议它可用于生成新进程 但没有提及它们是否并行 如果它们可以并行完成 您能否给我举一个例子或将我链接到一个例子 这取决
  • XGBoostError:[10:10:03] /workspace/src/tree/updater_gpu_hist.cu:1407:gpu_hist 中的异常:NCCL 失败

    PROJECT Nvidia 开发者项目 https developer nvidia com blog gradient boosting decision trees xgboost cuda 在 Google Colab 环境中 MY

随机推荐

  • NHibernate 的 SQL 2008 方言支持

    有人正在研究或知道 NHibernate 是否存在 SQL 2k8 方言 这是最近在 NHibernate Google Group 上询问 http groups google com group nhusers browse threa
  • AVAssetWriter 未知错误

    我正在尝试使用图像创建视频AVAssetWriter 实现的代码在大多数情况下工作正常 但在随机时刻 编写器会出现问题 AVAssetWriter videoWriter videoWriter finishWriting NSLog vi
  • 如何在本机反应中将文本放在图像上?

    如何在本机反应中将文本垂直放置在图像上 我找到了这个文档 https medium com mheavers vertically centering text over images in react native with flexbo
  • 如何获取溢出:隐藏或溢出:滚动div的真实.height()?

    我有一个关于如何获得 div 高度的问题 我知道 height and innerHeight 但在这种情况下 他们都没有为我完成这项工作 问题是 在这种情况下 我有一个溢出宽度的 div 溢出 滚动 并且 div 具有固定的高度 如果我使
  • woocommerce 在添加到购物车时添加动态价格

    我的任务是 我有 test test1 test2 test3 gt 4 个产品 测试产品价格为 0 美元 添加到购物车时 添加到特定 测试 产品的价格为 500 美元 如何实现这一目标 我使用以下钩子 add action woocomm
  • 使用虚拟数据创建 DataTable 对象

    我正在尝试将 DataTable 数据绑定到手风琴 我发现如果我使用表适配器从数据库检索 DataTable 它会完美地绑定到手风琴 但是我想要做的是创建一个虚拟表 用于测试目的 如果我无权访问我的数据库 创建虚拟表的代码如下 DataTa
  • 使用 Python 从 WSDL 文件创建模拟 Web 服务

    我们正在为远程服务编写一个客户端 该客户端公开 SOAP Web 服务并发布这些服务的 WSDL 定义 我们在测试期间无法访问系统 因此我们想编写一个模拟服务 我们使用 Python 作为客户端 因此理想情况下我们希望使用 Python 作
  • unsigned int 与 size_t

    我注意到现代 C 和 C 代码似乎使用size t代替int unsigned int几乎无处不在 从 C 字符串函数的参数到 STL 我很好奇这样做的原因以及它带来的好处 The size ttype 是无符号整数类型 它是sizeof运
  • 模型中 _set 的 Django 管理器

    我目前正在学习 Django 但我不知道如何自己解决这个问题 我正在看书开发人员库 使用 Django 进行 Python Web 开发在一章中 您将构建一个简单的 CMS 系统 其中包含两个模型 故事和类别 一些通用和自定义视图以及视图模
  • 如何在 Python 中从 YAML 文件创建树形数据结构?

    假设我有一个 YAML 文件 如下所示 template artifacts config a value1 b value2 jars a value1 b value2 scripts a value1 b value2 我希望它像一棵
  • 如何增加 docker-machine 内存 Mac

    我是 Docker 新手 并尝试通过本教程从 Docker 映像设置 MemSQL http docs memsql com 4 0 setup docker http docs memsql com 4 0 setup docker 我使
  • 检查其中一个 div 是否包含我在 nightwatch 中的值

    我在使用 nightwatch js 测试我的 web 应用程序时遇到问题 我需要迭代页面上的所有 div 元素 以检查是否存在包含我之前添加的所有子元素的元素 例如我有 div h2 text1 h2 h3 second text1 h3
  • 如何使用unix替换ear中的文件

    我有一个sample ear 文件 我想替换sample ear 中的特定文件 consider ear file sample ear which content com1 test1 file1 sh and com2 file2 sh
  • C# - POST 请求中的正文内容

    我需要用 C 进行一些 api 调用 我正在使用 Microsoft 的 Web API 客户端来执行此操作 我成功发出了一些 POST 请求 但我不知道如何将字段 Body 添加到我的请求中 任何想法 这是我的代码 static Http
  • 在 LINQ 中加入匿名类型

    我确实有 2 个 C 声明表 它在程序创建期间初始化列 我想根据其 UserID 和 UserName 加入该表 我的代码如下 from nSJL in UserList AsEnumerable join SJL in UserListO
  • jQuery 在 asp net core 2 razor 中设置日期值

    我在我的 asp net core razor 表单中遇到 jQuery 问题 我可以使用 jQuery 在文本等输入类型中更改值 但不能更改日期类型 我不知道为什么 这是项目模型的一部分 只是我想更改形式的属性 DataType Data
  • 判断变量是否能被 2 整除

    如何判断一个变量能否被2整除 此外 如果是 我需要执行一个函数 如果不是 我需要执行一个不同的函数 使用模数 Will evaluate to true if the variable is divisible by 2 variable
  • 设置选择框的默认值

    我是流媒体新手 我尝试为 sidebar selectbox 设置默认值 代码如下 我很感激你的帮助 先感谢您 st sidebar header Settings fichier st sidebar selectbox Dataset
  • 如何在过程或触发器内创建 mysql 事件?

    最近我一直在寻找以下情况的解决方案 我有 mysql 表 其结构 CREATE TABLE IF NOT EXISTS battles id int 11 NOT NULL AUTO INCREMENT active tinyint 1 N
  • 如何在Python中获取多边形内的点列表?

    我进行了很多搜索 但找不到我的问题的任何实际答案 我有一个多边形 例如 86 52 85 52 81 53 80 52 79 48 81 49 86 53 85 51 82 54 84 54 83 49 81 52 80 50 81 48