python-3.x 从numpy数组中绘制直线

but5z9lq  于 2023-01-27  发布在  Python
关注(0)|答案(1)|浏览(150)

我已经到处寻找了,但是我还没有找到一个解决方案,所以我在这里问一下。我有一个脚本,它创建了一个坐标点的大型numpy数组(~10^8个点),然后我想使用坐标绘制一条多边形线。PIL的ImageDraw.line对于常规列表工作得很好,但是当使用numpy数组时似乎有一个问题。
现在我的解决方案是

image = Image.new('RGB', (2**12, 2**12), 'black')
draw = ImageDraw.Draw(image, 'RGB')
draw.line(pos.tolist(), fill = '#00ff00')

其中pos是包含所有点的大型numpy数组,顺序如下:[x0, y0, x1, y1, ...](如果需要,可以更改)。程序中最耗时的部分是pos.tolist()部分,约占运行时间的75%。
有没有办法画一条线,然后保存到一个图像中,并将其保存为一个numpy数组?我只想要一个简单的图像,除了线和黑色背景之外没有其他东西。

ylamdve6

ylamdve61#

列表强制转换可以替换为float32强制转换,如下所示

draw.line(pos.astype(np.float32), fill='#00ff00')

通常,如果在形成点数组时,为点数组本身以及与之交互的所有数组显式指定np.float32类型,则可以摆脱强制转换,例如

pos = np.ones((2**8, 2), dtype=np.float32).reshape(-1)
pos *= np.random.randint(0, 2**12-1, size=(2**8, 2)).reshape(-1)
image = Image.new('RGB', (2**12, 2**12), 'black')
draw = ImageDraw.Draw(image, 'RGB')
draw.line(pos, fill='#00ff00')

应该没问题。

相关问题