如何将8×8二进制numpy数组转为灰度图像?全黑图问题求助
解决二进制numpy数组转灰度图全黑的问题
问题核心是数组值范围不匹配:PIL处理灰度图像时,默认采用0(黑色)到255(白色)的8位灰度区间,而你的数组仅包含0和1,1对应的亮度极低,肉眼几乎无法识别,因此输出全黑图像。
以下是具体修正方案:
方案1:缩放值到标准灰度范围(推荐)
将数组中的1转换为255(标准白色灰度值),同时确保数组类型为uint8(PIL支持的8位无符号整数类型),并明确指定灰度图像模式:
import numpy as np from PIL import Image # 处理数组:转换为uint8并将1缩放为255 scaled_array = (array.astype(np.uint8) * 255) # 创建8位灰度图像并保存 img = Image.fromarray(scaled_array, mode='L') img.save('dummy_pic.png')
如果你的数组原本就是uint8类型(值为0和1),可以简化为:
scaled_array = array * 255 img = Image.fromarray(scaled_array, mode='L') img.save('dummy_pic.png')
方案2:使用1位二进制图像模式
也可以直接指定mode='1'创建1位二值图像,但部分图像查看器对该模式的支持可能不稳定:
from PIL import Image # 转换数组类型后创建1位二值图像 img = Image.fromarray(array.astype(np.uint8), mode='1') img.save('dummy_pic.png')
内容的提问来源于stack exchange,提问作者BlueCurve
相关产品推荐
相关产品推荐

