Python 生成多边形以填充图像
我想生成n个多边形,比如说50个,这样它们就能填充给定图像的所有部分,比如300x300像素 我还希望每个多边形都是二维三角形,即随机拾取过程不应在y或x方向的同一条线上拾取3个点 到目前为止,这是我的解决方案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
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一点帮助都没有。我希望形状重叠。