You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将0/1构成的二维数组正确转换还原为二进制黑白图像

问题背景

开发过程中需要生成仅含黑白像素的随机二进制图像,规则为1代表黑色、0代表白色,生成的数组会存入txt文件,存储格式截断后如下:

[[0 1 0 ... 0 0 1] [1 1 1 ... 0 0 0] [1 0 0 ... 0 1 0] ... [0 1 1 ... 1 0 1] [1 1 0 ... 0 1 1] [0 1 1 ... 0 1 0]]

示例图像效果:
二进制随机图像示例

现有读取数组转图像的代码运行后输出全黑图像,无法得到预期的黑白效果,原代码如下:

import numpy as np
from PIL import Image as im

array = np.genfromtxt('binary_array.txt', dtype=int)
print(array)
print(array.shape)
data = im.fromarray(array)
data.save('new_img.png')
故障原因
  • PIL处理单通道灰度图像时,默认识别uint8类型、取值范围0~255的数组,数值0对应纯黑、255对应纯白。当前传入的数组仅包含0、1两个int类型值,数值1对应的亮度极低,肉眼看和纯黑没有区别
  • 未显式指定图像模式,传入默认int类型时PIL存在类型解析异常的可能
  • 原规则定义0为白色、1为黑色,和PIL默认灰度规则(0黑255白)是反向的,直接转换逻辑也不匹配
修复代码

按照规则做值映射和类型转换,显式指定灰度图模式即可:

import numpy as np
from PIL import Image as im

array = np.genfromtxt('binary_array.txt', dtype=int)
# 反转二值匹配黑白规则,映射到0-255灰度范围,转换为uint8类型
img_data = (1 - array) * 255
img_data = img_data.astype(np.uint8)
# 显式指定为单通道灰度模式
img = im.fromarray(img_data, mode='L')
img.save('new_img.png')

如果后续调整规则为1代表白色、0代表黑色,去掉1 - array的反转步骤,直接将数组乘255做类型转换即可。

内容的提问来源于stack exchange,提问作者Aurorius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 02:48:39