我正在为图片编写通用算法,因此我从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对象作为输出
答案 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"
:
和"result2.png"
: