OpenCV-python利用蒙版进行叠加(含alpha通道)

本文已知条件

  1. 前景图
  2. 前景蒙版
  3. 背景图

代码实现

# 读取图片,蒙版(黑色代表不选中,白色代表选中)
img = cv2.imread(img_item)
img = cv2.resize(img, (960, 1280), interpolation=cv2.INTER_LINEAR)
mask = cv2.imread(os.path.join(mask_file, mask_item), cv2.IMREAD_UNCHANGED)
bg = cv2.imread(bg_path)
bg = cv2.resize(bg, (img.shape[1], img.shape[0]), interpolation=cv2.INTER_LINEAR)

bg_mask = (np.ones(img.shape, dtype='uint8') * 255) - mask # mask求反,用一个255的矩阵减mask
mask = mask.astype("float") # 类型转化:uint8->float
mask = mask / 255 # 求透明度
img = img * mask # 用透明度乘图片
bg = bg * (bg_mask/255) # 背景同样
img = img.astype("uint8")
bg = bg.astype("uint8")
stacked = cv2.addWeighted(img, 1, bg, 1, 0)  # 叠加两图
cv2.imshow('r1', stacked)
cv2.waitKey(0)

中间结果解释

读取的img
读取的img
读取的mask
在这里插入图片描述
读取的mask
在这里插入图片描述
mask翻转后的结果
对应代码:

bg_mask = (np.ones(img.shape, dtype='uint8') * 255) - mask # mask求反,用一个255的矩阵减mask

在这里插入图片描述
img裁剪后的结果
对应代码:

mask = mask / 255 # 求透明度
img = img * mask # 用透明度乘图片

在这里插入图片描述
背景图扣掉人像的结果
对应代码:

bg_mask = (np.ones(img.shape, dtype='uint8') * 255) - mask # mask求反,用一个255的矩阵减mask
bg = bg * (bg_mask/255) # 背景同样

在这里插入图片描述
背景图扣掉人像的结果img裁剪后的结果相叠加
对应的代码

stacked = cv2.addWeighted(img, 1, bg, 1, 0)  # 叠加两图

在这里插入图片描述

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值