如何获取ImageDraw对象的数组?

时间:2019-04-07 19:56:40

标签: python-3.x python-imaging-library

我正在为图片编写通用算法,因此我从PIL库的Image类开始,并创建了一个输入图像的numpy数组。因此,现在我想绘制一些图形,最简单的方法是使用ImageDraw,但是接下来我又应该使用数组进行下一次演化,因此我需要将ImageDraw对象转换为Image对象或numpy数组。

任何建议我该怎么做?

我尝试使用对Image对象起作用的numpy转换。试图找到包含的转换方法

from PIL import Image, ImageDraw
import numpy

input_image = Image.open("i2.jpg")
width, height = input_image.size
num_weights = width * height

image_draw = ImageDraw.Draw(Image.new('RGB', (width, height), 'WHITE'))
input_image = numpy.array(input_image.getdata())

#Do some staff with image_draw using information from input_image
#And try to convert image_draw to input_image

我想将一个numpy数组或Image对象作为输出

1 个答案:

答案 0 :(得分:1)

我认为您既希望将图像处理为PIL Image,以便可以在其上进行绘制,也希望将其处理为Numpy数组,以便可以对其进行处理。

因此,这里有一个示例,说明如何使用PIL绘制图像,然后将其转换为Numpy数组并对其进行一些处理,然后将其转换回PIL图像。

#!/usr/bin/env python3

from PIL import Image, ImageDraw

# Create a black 600x200 image
img = Image.new('RGB', (600, 200))

# Get a drawing handle
draw = ImageDraw.Draw(img)

# Draw on image
draw.rectangle(xy=[10,20,300,80], fill='red')

# Save as "result1.png"
img.save('result1.png')

# Convert PIL Image to Numpy array for processing
na = np.array(img)

# Make mask selecting red pixels then make them blue
Rmask =(na[:, :, 0:3] == [255,0,0]).all(2) 
na[Rmask] = [0,0,255]

# Convert Numpy array back to PIL Image
img = Image.fromarray(na)

# Save as "result2.png"
img.save('result2.png')

这两个图像是"result1.png"

enter image description here

"result2.png"

enter image description here