Python基于PIL生成37x37黑白图像 0白1黑输出与预期不符求助
错误原因及修复方案
你代码里存在3个核心问题导致输出不符合预期:
- 你定义的
cols37数组实际只有36个元素,比你需要的37列少1位,生成的矩阵尺寸本身就不符合37×37的要求 - PIL的
'1'二值图像模式的像素映射规则和你的预期相反:True/1对应白色像素,False/0对应黑色像素,和你要求的1黑0白规则刚好颠倒 - 你当前的逻辑是把同一行
cols37重复37次作为所有行的内容,生成的矩阵所有行完全一致,只会输出纯竖条纹图案,和你预期的带特殊图案的目标图像不符,你需要补充构造37行各自不同的矩阵数据
修正后的示例代码
import numpy as np from PIL import Image # 先补全cols37为37位,后续可替换为你实际需要的37行不同的行数据,这里仅做逻辑演示 cols37 = [1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,1] # 末尾补1位凑37个元素 rows = [] for i in range(37): # 深拷贝避免所有行引用同一个列表 rows.append(cols37.copy()) mura = np.array(rows, dtype=np.bool) # 按你的规则取反,实现1对应黑、0对应白的效果 mura = ~mura temp = Image.fromarray(mura, '1') temp.save('my1.png') # 正确打开图像的写法 img = Image.open('my1.png') img.show()
内容的提问来源于stack exchange,提问作者Ozgur Idis
相关产品推荐
相关产品推荐

