将一个NumPy数组转换为一个图像

  • Post category:Python

将一个NumPy数组转换为一个图像,需要使用到图像处理库PIL(Python Imaging Library)。下面是详细步骤:

1. 安装PIL库

在命令行窗口中输入以下命令即可安装:

pip install pillow

2. 导入PIL库及NumPy库

在代码中先导入所需的库:

from PIL import Image
import numpy as np

3. 创建NumPy数组

接下来,我们需要创建一个NumPy数组来作为图像的基础。

arr = np.zeros([200, 200, 3], dtype=np.uint8)

这个NumPy数组是一个 $200\times200$ 的二维数组,并且每个像素点由一个长度为3的数组表示,用来表示RGB颜色。

4. 修改NumPy数组

用数字填充数组来创建一个具有不同颜色和形状的图像,可以修改NumPy数组。

下面是创建一个红色矩形的示例代码:

arr[50:150, 50:150, :] = [255, 0, 0]

这个代码将图像中第50行到第150行,第50列到第150列的像素值都修改为[255, 0, 0],即红色。

下面是创建一个渐变色的示例代码:

for i in range(200):
    arr[i,:,0] = np.linspace(0, 255, 200).astype(np.uint8)

这个代码将图像中每个像素的红色通道值设为从0到255之间,在200个区间内等距分布的数。

5. 将NumPy数组转换为PIL图像对象

使用PIL库的Image.fromarray方法将NumPy数组转换为PIL图像对象。

img = Image.fromarray(arr)

6. 展示图像

最后,使用show()方法将图像展示出来。

img.show()

完成上述步骤后,就可以成功将一个NumPy数组转换为一个图像。

下面是完整代码实例:

from PIL import Image
import numpy as np

# 创建NumPy数组
arr = np.zeros([200, 200, 3], dtype=np.uint8)

# 修改NumPy数组
arr[50:150, 50:150, :] = [255, 0, 0]

# 将NumPy数组转换为PIL图像对象
img = Image.fromarray(arr)

# 展示图像
img.show()

下面是另一个示例,展示了如何创建一个渐变色的图像:

from PIL import Image
import numpy as np

# 创建NumPy数组
arr = np.zeros([200, 200, 3], dtype=np.uint8)

# 修改NumPy数组
for i in range(200):
    arr[i,:,0] = np.linspace(0, 255, 200).astype(np.uint8)

# 将NumPy数组转换为PIL图像对象
img = Image.fromarray(arr)

# 展示图像
img.show()