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

Python像素画图像矩阵叠加:np.where运行结果不符合预期求助

问题核心原因

你直接对Python原生列表L和元组tr做==比较,只会返回单个布尔值False(列表对象和元组对象不可能相等),完全不是你预期的「逐像素判断RGB值是否等于tr」的逐位布尔掩码。np.where接收到全为假的条件后,所有位置都会取第三个参数L的值,最终N和L完全一致。

修复方案

你需要先把M、L转为numpy数组,再对每个像素的三个RGB通道做全相等判断,生成逐位置的布尔掩码后再做替换,注意掩码需要补充维度匹配RGB数组的三维结构。

修正后的完整代码如下:

import numpy as np
from PIL import Image
import os

dirname = os.path.dirname(__file__)
dimensions = 480, 480
x=1

bg = (255,186,241)
bb = (214,168,102)
tr = (0,0,0)
tl = (222,191,140)

M = [
    [bg,bg,bg,bg,bg,bg],
    [bg,bb,bb,bb,bg,bg],
    [bg,bb,bb,bb,bg,bg],
    [bg,bg,bg,bg,bg,bg],
    [bg,bg,bg,bg,bg,bg],
    [bg,bg,bg,bg,bg,bg]
]

L = [
    [tr,tr,tr,tr,tr,tr],
    [tr,tr,tr,tr,tr,tr],
    [tr,tr,tr,tr,tr,tr],
    [tr,tr,tr,tl,tr,tr],
    [tr,tr,tr,tl,tr,tr],
    [tr,tr,tr,tr,tr,tr]
]

# 转为numpy数组
M_arr = np.array(M, dtype=np.uint8)
L_arr = np.array(L, dtype=np.uint8)
# 生成逐像素的匹配掩码,补充最后维度适配RGB三通道结构
mask = (L_arr == tr).all(axis=-1)[..., None]
# 基于掩码替换值
N = np.where(mask, M_arr, L_arr)

new_image = Image.fromarray(N)
new_image = new_image.resize(dimensions, resample=0)
imgname = dirname + '/testfolder/' + (str(x)) + '.png'
new_image.save(imgname)

修改后运行,会保留M的原有图案,仅在L对应tl的两个位置替换为对应颜色,符合你的预期需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:15:06