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

Python OpenCV如何基于掩码实现图像混合合成效果

OpenCV实现与PIL composite等价的图像掩码混合

准备素材

现有3张图像素材:

  • original.png(原图):
    original.png
  • background.png(背景图):
    background.png
  • mask.png(掩码图,单通道灰度图):
    mask.png

目标效果

将三张图按掩码规则混合,输出result.png,预期效果如下:
result.png

混合规则和PIL的Image.composite(original, background, mask)完全一致:掩码白色(值为255)区域显示原图内容,掩码黑色(值为0)区域显示背景内容,灰度过渡区域做像素级线性融合。

已验证的PIL实现代码

from PIL import Image

original = Image.open('original.png').convert('RGB')
background = Image.open('background.png').convert('RGB')
mask = Image.open('mask.png').convert('L')
result = Image.composite(original, background, mask)
result.save('result.png')

OpenCV实现补全

待补全的基础代码框架:

import cv2

original = cv2.imread('original.png')
background = cv2.imread('background.png')
mask = cv2.imread('mask.png', 0)
result = ???? # 核心逻辑待补全
cv2.imwrite('result.png', result)

核心逻辑写法

两种等价实现,输出效果和PIL版本完全一致:

  1. 内置API简洁写法(推荐)
result = background.copy()
original.copyTo(result, mask)
  1. 手动加权计算写法(逻辑透明,方便自定义修改)
# 把单通道掩码转为3通道,归一化到0-1范围匹配浮点计算
mask_bgr = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR) / 255.0
result = (original * mask_bgr + background * (1 - mask_bgr)).astype("uint8")

注意:OpenCV默认读取的彩色图是BGR通道顺序,和PIL的RGB顺序不影响本次混合的最终结果,因为两张图的通道顺序一致,按像素加权/拷贝不会出现色彩偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:51:17