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对象上执行其他图像处理操作,以满足具体需求。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签