Python 实现Image和Ndarray互相转换

1. 导入相关库

在实现Image和Ndarray之间的互相转换之前,首先需要导入需要的Python库:

import numpy as np

from PIL import Image

2. Image到Ndarray的转换

要将一个Image对象转换为一个Ndarray对象,可以使用NumPy库的asarray()函数。下面是具体的代码示例:

image = Image.open("example.jpg")

array = np.asarray(image)

在上述代码中,Image.open()函数用于打开一个图片文件,它接受一个文件名作为参数。然后,使用np.asarray()函数将打开的Image对象转换为Ndarray对象。

3. Ndarray到Image的转换

要将一个Ndarray对象转换为一个Image对象,可以使用PIL库的fromarray()函数。具体代码示例如下:

array = np.random.randint(0, 255, size=(256, 256, 3), dtype=np.uint8)

image = Image.fromarray(array)

在上述代码中,首先使用NumPy库的random.randint()函数生成一个随机的三维Ndarray对象,表示一张256x256的彩色图片。然后,使用Image.fromarray()函数将该Ndarray对象转换为Image对象。

注意:

在进行Ndarray到Image的转换时,需要注意以下几点:

Ndarray对象的数据类型需要与Image对象对应。

如果Ndarray对象是一个二维数组,表示灰度图片,需要在调用fromarray()函数时,设置参数mode='L'

如果Ndarray对象是一个三维数组,表示彩色图片,则可以不设置mode参数,或者设置为mode=None

4. 示例

下面给出一个完整的示例,演示了如何将一张图片转换为Ndarray对象,并再次将该Ndarray对象转换为图片。

image = Image.open("example.jpg")

array = np.asarray(image)

print("Image size:", image.size)

print("Array shape:", array.shape)

recovered_image = Image.fromarray(array)

recovered_image.save("recovered.jpg")

在上述代码中,首先通过Image.open()函数打开一张图片,然后使用np.asarray()函数将其转换为一个Ndarray对象。接下来,通过输出图片和Ndarray的一些属性,可以验证转换是否成功。最后,使用Image.fromarray()将Ndarray对象转换回Image对象,并保存为一张新的图片。

5. 总结

本文介绍了Python中如何实现Image和Ndarray之间的互相转换。其中,Image到Ndarray的转换使用了NumPy库的asarray()函数,而Ndarray到Image的转换使用了PIL库的fromarray()函数。通过这些转换函数,可以方便地在图片和Ndarray之间进行数据的转换和操作。

值得注意的是,在进行转换时需注意数据类型和图片的通道数,以确保正确的转换结果。此外,通过以上示例,您可以在实际项目中对图片进行处理,并在Ndarray对象上执行其他图像处理操作,以满足具体需求。

后端开发标签