numpy.array数组转换成PIL.Image

记录一下自己做图像处理时遇到的坑:

将一个处于 [0,1] 之间的numpy数组展示为图片并显示,根据网上的方法

from PIL import Image

# numpy_array 为要显示的数组
numpy_array = np.random.rand(224, 224, 3)

im = Image.fromarray(numpy_array)
im.show()

结果报错 TypeError:Cannot handle this data type

然后我仔细阅读了函数文档,也没有发现任何不对的地方,随后我又进行了一系列的实验,最终,下列代码可以成功运行:

import numpy as np
from PIL import Image

a = np.random.rand(224, 224, 3)

a = np.clip(a, 0, 1) # 将numpy数组约束在[0, 1]范围内
a = (a * 255).astype(np.uint8) # 转换成uint8类型

im = Image.fromarray(a)
im.show()

总结起来,Image.fromarray()对输入的numpy array是有要求的:1. dtype是uint8;2. shape是(H, W, C)类型。

你可能感兴趣的:(技能,python,numpy,PIL,图像处理)