opencv通过mask掩码图合成两张图

opencv通过mask掩码图合成两张图

此处两张图分别为纯色背景图和抠出来的人像图(背景是纯白色的)

def composite(fg, bg, a, w, h):
        """
        :param fg: 白色背景人像图,Image对象
        :param bg: 纯色图,Image对象
        :param a: mask灰度图,可以是二值,Image对象
        :param w: 原图的宽
        :param h: 原图的高
        :return: Image对象
        """
        bbox = fg.getbbox()
        bg = bg.crop((0, 0, w, h))
        fg_list = fg.load()
        bg_list = bg.load()
        a_list = a.load()
        for y in range(h):
            for x in range(w):
                alpha = a_list[x, y] / 255

                # alpha = (a_list[x,y][0] / 255 + a_list[x,y][1] / 255 + a_list[x,y][2] / 255) / 3
                t = fg_list[x, y][0]
                t2 = bg_list[x, y][0]
                if alpha >= 1:
                    r = int(fg_list[x, y][0])
                    g = int(fg_list[x, y][1])
                    b = int(fg_list[x, y][2])
                    bg_list[x, y] = (r, g, b, 255)
                elif alpha > 0:
                    r = int(alpha * fg_list[x, y][0] + (1 - alpha) * bg_list[x, y][0])
                    g = int(alpha * fg_list[x, y][1] + (1 - alpha) * bg_list[x, y][1])
                    b = int(alpha * fg_list[x, y][2] + (1 - alpha) * bg_list[x, y][2])
                    bg_list[x, y] = (r, g, b, 255)

        return bg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值