PIL(Python 图像库)是为 Python 创建的图像处理包。它提供了各种类和方法,可帮助创建、编辑和导出图像文档。不幸的是,对 PIL 模块的支持已于 2011 年停止。然而,具有相似目标的 Pillow 项目分叉了 PIL 模块。最终,Pillow 模块取代了 PIL,成为 Python 开发人员的默认图像处理工具。
Numpy 是 Python 中科学计算的首选模块。Numpy 引入了一个名为 “ndarray” 的数组对象。它们比传统的 Python 列表更快、更有效。数据科学家使用此模块是因为它的效率和适当的资源管理。
安装模块
PIL
PIL 不是 Python 标准库的一部分。使用以下命令通过 PIP 手动安装 PIL。
$ pip install Pillow
NumPy
Numpy 不是 Python 标准库的一部分。使用以下 PIP 命令进行安装。
$ pip install numpy
多个方法将 PIL 图像转换为 Numpy 数组
现在我们已经对 Pillow 模块和 Numpy 模块有了简要的了解,让我们看看将 PIL 图像转换为 Numpy 数组的各种方法。
使用numpy.asarray()
函数将 PIL 图像转换为 Numpy 数组
要将 PIL 图像对象转换为 numpy 数组,我们可以使用numpy.asarray()
。
import numpy as np
from PIL import Image
myImage = Image.open("/content/companylogo.jpg")
myImageArr = np.asarray(myImage)
print(myImageArr.shape)
输出
(298, 33, 1500)
使用numpy.array()
函数将 PIL 图像转换为 Numpy 数组
使用numpy.array()函数,我们将 PIL 图像转换为 3D ndarray
import numpy as np
from PIL import Image
myImage = Image.open("/content/companylogo.jpg")
myImageArr = np.array(myImage)
print(myImageArr.shape)
输出
(298, 33, 1500)
在上面的程序中,我们已将图像转换为 3D Numpy ndarray 。最后,我们显示了数组形状。
如何在 Python 中将 2D 矩阵转换为图像
使用 Numpy ndarray 和 Pillow 模块,我们可以将 2D 矩阵从 Numpy 转换为 Image 文件。让我们看看下面的实现。
from PIL import Image
import numpy as np
# 创建一个大小为50x50的整数值矩阵
myArray = np.random.randint(300, size=(50,50), dtype=np.uint8)
resImage = Image.fromarray(arr)
# 以png格式导出图像
resImage.save("image2Darray.png")
输出
如何将 RGB 图像转换为 Numpy 数组
像 matplotlib 和 openCV 这样的 Python 模块原生使用 Numpy 数组。因此,在 OpenCV 的帮助下,我们可以将 RGB 图像加载为 Numpy 数组。
import cv2
imageArray = cv2.imread("RGBImage.tiff",mode='RGB')
print(type(imageArray))
输出
<type 'numpy.ndarray'>
如何将具有灰度值的 2D Numpy 数组转换为 PIL 对象
import numpy as np
from PIL import Image
myArray = np.linspace(0,1,256*256)
array2D = np.reshape(myArray,(256,256))
# 创建PIL图像
imgGray = Image.fromarray( array2D , 'L')
imgGray.save("grayscale.png")
输出
如何将 Base64 图像转换为 Numpy 数组
例如,假设您从 HTTP 接收 base64 编码的图像。我们如何转换为 Numpy 数组?
import torch
import numpy as np
from PIL import Image
import base64
base64_decoded = base64.b64decode(test_image_base64_encoded)
with open("sample.jpg", "wb") as sample:
sample.write(base64_decoded)
image = Image.open("sample.jpg")
imageArray = np.array(image)
解释
首先,我们解码 base64 图像。然后,我们创建一个 JPG 文件并将解码后的图像写入该文件。最后,我们打开图像并将其转换为 NumPy 数组。