Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成多边形以填充图像_Python_Numpy_Python Imaging Library - Fatal编程技术网

Python 生成多边形以填充图像

Python 生成多边形以填充图像,python,numpy,python-imaging-library,Python,Numpy,Python Imaging Library,我想生成n个多边形,比如说50个,这样它们就能填充给定图像的所有部分,比如300x300像素 我还希望每个多边形都是二维三角形,即随机拾取过程不应在y或x方向的同一条线上拾取3个点 到目前为止,这是我的解决方案 import PIL.ImageDraw as ImageDraw import PIL.Image as Image import random import numpy as np dimensions = (300, 300) img = Image.new('RGB', dim

我想生成n个多边形,比如说50个,这样它们就能填充给定图像的所有部分,比如300x300像素

我还希望每个多边形都是二维三角形,即随机拾取过程不应在y或x方向的同一条线上拾取3个点

到目前为止,这是我的解决方案

import PIL.ImageDraw as ImageDraw
import PIL.Image as Image
import random
import numpy as np

dimensions = (300, 300)
img = Image.new('RGB', dimensions)

polygons = [[tuple(np.random.randint(low=0, high=dimensions[1] + 1, size=2)) for _ in range(3)] for _ in range(50)]

drw = ImageDraw.Draw(img, 'RGBA')
for i in range(50):
    random_numbers = np.random.randint(low=0, high=256, size=(50, 3))
    generated_colours = [tuple(colour + [128]) for colour in random_numbers.tolist()]
    drw.polygon(polygons[i], generated_colours[i])
del drw

img.show()
这将生成50个半透明多边形,但它们不会填充形状,并允许创建实质上是直线的多边形

我怎样才能实现我想要的

编辑:我还想以更有效的方式生成多边形,但出于某些原因

polygons = np.random.randint(low=0, high=dimensions[1], size=(50, 3, 2))
不起作用

编辑2:我想我已经解决了生产线的问题,但是我想也许效率可以提高

polygons = []
for i in range(50):
    coordinates = [[-1, -1], [-1, -1], [-1, -1]]
    for j in range(3):
        new_coordinates = tuple(np.random.randint(low=0, high=300 + 1, size=2))
        while new_coordinates[0] in [coordinates[0][0], coordinates[1][0], coordinates[2][0]] or new_coordinates[1] in [coordinates[0][1], coordinates[1][1], coordinates[2][1]]:
            new_coordinates = tuple(np.random.randint(low=0, high=300 + 1, size=2))
        coordinates[j] = new_coordinates
    polygons.append(coordinates)

请问结果应该是什么样的?先画一个很大的,然后再覆盖这个形状怎么样?@marksetchell它应该用三角形填充,这样你就看不到背景了。也许吧,但这有点违背了这一点。除了退化性,你必须单独处理,Delaunay三角剖分本质上应该做你想做的@PaulPanzer我怎样才能用它在PIL中生成多边形?@PaulPanzer实际上我认为Delaunay一点帮助都没有。我希望形状重叠。