Numpy PIL 图像数组 (Numpy 数组 转 数组) – Python

Numpy PIL 图像数组 (Numpy 数组 转 数组) – Python

阅读更多:Numpy 教程

什么是 Numpy 和 PIL?

在介绍 Numpy 和 PIL 的使用之前,先来了解一下这两个 Python 库。

Numpy

NumpyPython 中用于科学计算的一个重要库。它提供的多维数组对象和许多用于操作数组的函数,被广泛应用于科学计算、数据分析、机器学习等领域。

PIL

PIL(Python Image Library)是一个用于处理图像的 Python 库。它支持多种图像格式,包括 BMP、JPEG、GIF、PNG 等,并提供了许多图像处理功能,如裁剪、缩放、旋转等。

将 PIL 图像转为 Numpy 数组

在使用 PIL 进行图像处理时,我们可能需要将 PIL 中的图像转为 Numpy 数组,以方便进行数组操作和算法处理。

使用 PIL.Image 对象的 numpy() 方法

PIL 库提供了 PIL.Image 对象的 numpy() 方法,该方法可以将 Image 对象转为 Numpy 数组。对于 RGB 彩图,返回的 Numpy 数组的 shape 为 (height, width, 3)。

例如,我们有一张名为 test.jpg 的彩色图像,它的大小为 512×512:

from PIL import Image
import numpy as np

img = Image.open('test.jpg')
img_arr = np.array(img)
print(img_arr.shape)  # 输出 (512, 512, 3)

使用 PIL.Image 对象的 getdata() 和 reshape() 方法

除了使用 numpy() 方法,我们还可以使用 PIL.Image 对象的 getdata() 和 reshape() 方法,手动将图像数据转为 Numpy 数组。

img = Image.open('test.jpg')
data = img.getdata()
img_arr = np.array(data).reshape(img.size[0], img.size[1], 3)
print(img_arr.shape)  # 输出 (512, 512, 3)

将 Numpy 数组转为图像

在进行图像处理时,我们通常需要将 Numpy 数组重新转为 PIL.Image 对象,以便进行图像的显示和保存。

使用 PIL.Image 对象的 fromarray() 方法

PIL 库提供了 PIL.Image 对象的 fromarray() 方法,该方法可以将 Numpy 数组转为 Image 对象。对于 RGB 彩图,需要将数组的 dtype 设置为 uint8。

img_arr = np.zeros((512, 512, 3), dtype=np.uint8)
img_arr[:, :, 0] = 255  # 将第一通道赋值为 255,即红色
img_arr[:, :, 1] = 0    # 将第二通道赋值为 0,即绿色
img_arr[:, :, 2] = 0    # 将第三通道赋值为 0,即蓝色

img = Image.fromarray(img_arr)
img.show()  # 显示图像
img.save('test.jpg')  # 保存图像

将图像转为灰度图像

有时候,我们需要将彩色图像转为灰度图像进行处理。可以使用 PIL.Image 对象的 convert() 方法将彩色图像转为灰度图像,然后使用 numpy() 方法将灰度图像转为 Numpy 数组。

img = Image.open('test.jpg').convert('L')
img_arr = np.array(img)
print(img_arr.shape)  # 输出 (512, 512)

总结

本文介绍了如何将 PIL 图像转为 Numpy 数组,以及将 Numpy 数组转为 PIL 图像。在实际图像处理中,我们可以灵活使用这些方法以方便进行数组操作和算法处理。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程