要将 PIL 图像 转换为Numpy 数组,使用np.array()方法并将图像数据传给np.array()方法。
它将返回由像素值组成的数组。Pillow是Python成像库,支持各种图像文件格式,如PNG、JPEG、PPM、GIF、TIFF和BMP。
Pillow支持裁剪、调整大小、为图像添加文本、旋转和灰度等操作。
Python图像到Numpy数组
要将一个图像转换为Numpy 数组,请使用PIL的Image模块。Image模块提供了**Image****.open()**方法。然后,我们得到图像数据,再把图像数据传给np.array()方法,得到图像数据的数组。
我们的原始图像如下:
现在,让我们把这个Image转换成一个numpy数组:
import numpy as np
from PIL import Image
img_data = Image.open('forest.jpg')
img_arr = np.array(img_data)
print(img_arr)
输出结果
[[[178 204 231]
[173 199 226]
[174 200 227]
...
[153 188 218]
[153 188 218]
[154 189 219]]
[[174 200 227]
[171 197 224]
[175 201 228]
...
[151 186 216]
[149 184 214]
[147 182 212]]
[[171 197 224]
[170 196 223]
[175 201 228]
...
[150 185 215]
[147 182 212]
[144 179 209]]
...
[[130 94 46]
[142 105 53]
[182 143 86]
...
[ 56 55 51]
[ 52 50 53]
[ 44 41 48]]
[[137 96 66]
[126 83 48]
[154 111 66]
...
[ 43 42 37]
[ 38 36 39]
[ 37 34 43]]
[[ 98 56 32]
[110 67 35]
[130 87 44]
...
[ 40 39 34]
[ 37 35 40]
[ 44 41 52]]]
你可以在输出中看到,我们得到了图像数据的numpy数组。
我们使用了Image.open()方法和np.array()方法将PIL图像转换成Numpy数组。
img_arr的形状如下:
import numpy as np
from PIL import Image
img_data = Image.open('forest.jpg')
img_arr = np.array(img_data)
print(img_arr.shape)
输出
(6000, 4000, 3)
如何在Python中把Numpy数组转换为PIL图像
要在Python中把 Numpy 数组 转换为PIL 图像 ,使用Image.fromarray()方法。要使用numpy改变、修改或编辑Image,将其转换成numpy数组,然后执行数学运算来编辑数组,再使用Image.array()方法将其转换回Image。
我们甚至可以通过减去数值来修改img_arr,然后使用fromarray()函数从数组中创建一个图像,并将图像保存到文件系统中:
import numpy as np
from PIL import Image
img_data = Image.open('forest.jpg')
img_arr = np.array(img_data)
print(img_arr.shape)
img_arr = img_arr - 180
new_img = Image.fromarray(img_arr)
new_img.save("altered_forest.png")
输出
在这个例子中,我们使用np array()方法将PIL图像转换为Numpy数组,然后修改其像素并使用fromarray()方法将该数组转换为PIL图像。
结论
在机器学习中,Python将图像数据作为Numpy数组,即[高度、宽度、通道]格式。为了提高预测模型的性能,我们必须知道如何加载和处理图像。
在这个例子中,我们已经看到了如何加载图像,将其转换为Numpy数组,修改Numpy数组,然后再将其转换为图像。
本教程就到此为止,谢谢你的学习。

