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

使用PIL的ImageChops.add混合黑白得到白色而非灰色问题咨询

问题原因

你调用的ImageChops.add()的运算逻辑是两个图片对应像素点的RGB通道值直接相加,大于255的结果会被截断为255:

  • 红绿混合的场景下,红色[255,0,0]和绿色[0,255,0]各通道相加后结果为[255,255,0],没有超过255阈值,刚好是你预期的黄色,所以结果正常。
  • 黑白混合的场景下,黑色[0,0,0]和白色[255,255,255]各通道相加后结果为[255,255,255],和原白色数值一致,因此最终输出还是白色,不会得到灰色。

解决方案

如果你需要实现两张图片等比例混合得到中间色的效果,替换ImageChops.add为ImageChops.blend方法即可,该方法支持自定义混合权重:

from PIL import Image, ImageChops
import matplotlib.pylab as plt

im1 = Image.open(r'.\black.jpg')
im2 = Image.open(r'.\white.jpg')
# 第三个参数alpha为0.5代表两张图片的权重各占50%
result = ImageChops.blend(im1, im2, 0.5)

plt.imshow(result)

用上述代码混合黑白图片时,每个通道的计算逻辑为0 * 0.5 + 255 * 0.5 = 127.5,取整后得到[127,127,127],就是你预期的中性灰色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:27:03