如何在Python中把PIL图像转换成Numpy数组

1,905 阅读3分钟

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()方法,得到图像数据的数组。

我们的原始图像如下:

edit image using numpy 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")

输出

Convert PIL Image to Numpy Array in Python

在这个例子中,我们使用np array()方法将PIL图像转换为Numpy数组,然后修改其像素并使用fromarray()方法将该数组转换为PIL图像。

结论

在机器学习中,Python将图像数据作为Numpy数组,即[高度、宽度、通道]格式。为了提高预测模型的性能,我们必须知道如何加载和处理图像。

在这个例子中,我们已经看到了如何加载图像,将其转换为Numpy数组,修改Numpy数组,然后再将其转换为图像。

本教程就到此为止,谢谢你的学习。