zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    JAVA 线程安全与同步机制
    JAVA 多线程
    el-table 宽度自适应bug
    详解迭代器Iterator
    理解基本类型的溢出
    理解classpath
    I/O(一):基础知识
    C++: 智能指针
    C++: 值类别与移动语义基础
    CUDA 架构与编程概述
  • 原文地址:https://www.cnblogs.com/demiao/p/14994967.html
Copyright © 2011-2022 走看看