如何使用PIL将numpy数组转换为图像?代码运行输出全黑图
问题原因
你运行代码得到全黑图像,是两个写法错误导致的:
mode="1"是PIL的二值图像模式,该模式下像素取值范围为0-255,0代表纯黑,255代表纯白,你给中间块赋值的1属于极暗值,肉眼观测和纯黑没有区别。- 你创建numpy数组时指定
dtype=int,该类型在不同运行环境下位长不固定,PIL读取数组时优先匹配8位无符号整数(uint8)类型,非指定类型容易出现值解析偏差。
修正代码
如果你的需求是生成黑底白色方块的二值图像,按如下写法修改即可:
import numpy as np from PIL import Image # 数组类型指定为PIL兼容的uint8 arr2 = np.zeros((200,200), dtype=np.uint8) # 白色区域赋值为255,而非1 arr2[80:120,80:120] = 255 im = Image.fromarray(arr2, mode="1") im.save("C:/Users/Admin/Desktop/testImage.jpg")
如果你不需要严格的1位二值图,只是要灰度效果,可以直接用PIL默认匹配的8位灰度模式(mode="L"),不需要手动指定mode参数:
import numpy as np from PIL import Image arr2 = np.zeros((200,200), dtype=np.uint8) arr2[80:120,80:120] = 255 im = Image.fromarray(arr2) im.save("C:/Users/Admin/Desktop/testImage.jpg")
注意:使用PIL转换numpy数组为图像时,普通图像场景统一将数组dtype设为
np.uint8,像素值严格对应所选模式的取值范围,即可避免颜色显示异常问题。
内容的提问来源于stack exchange,提问作者noob4000
相关产品推荐
相关产品推荐

