0
点赞
收藏
分享

微信扫一扫

如何将 PIL 图像转换为 Numpy 数组

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")

输出

如何将 PIL 图像转换为 Numpy 数组_array()

如何将 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")

输出

如何将 PIL 图像转换为 Numpy 数组_PIL_02

如何将 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 数组。


举报

相关推荐

0 条评论