使用具有不同形状和位置的OpenCV混合两个图像

时间:2017-10-27 17:05:10

标签: python opencv image-processing

我需要混合两种不同类型的图像。

我有几个保存的透明背景对象,我想将它们添加到背景上。但是,它们的尺寸小于背景的大小,我想将它们放在随机位置。

例如:我把卧室的照片作为背景,并想在卧室的随意位置放一个冰箱(小于卧室)。

然而,由于代码使用的是图像的权重,我不知道如何在背景图像的某个位置定义这种混合,以及如何处理不同维度的两个图像。

我正在使用以下代码:

import numpy as np
import cv2

def blend_transparent(face_img, overlay_t_img):
    # Split out the transparency mask from the colour info
    overlay_img = overlay_t_img[:,:,:3] # Grab the BRG planes
    overlay_mask = overlay_t_img[:,:,3:]  # And the alpha plane

    # Again calculate the inverse mask
    background_mask = 255 - overlay_mask

    # Turn the masks into three channel, so we can use them as weights
    overlay_mask = cv2.cvtColor(overlay_mask, cv2.COLOR_GRAY2BGR)
    background_mask = cv2.cvtColor(background_mask, cv2.COLOR_GRAY2BGR)

    # Create a masked out face image, and masked out overlay
    # We convert the images to floating point in range 0.0 - 1.0
    face_part = (face_img * (1 / 255.0)) * (background_mask * (1 / 255.0))
    overlay_part = (overlay_img * (1 / 255.0)) * (overlay_mask * (1 / 255.0))

    # And finally just add them together, and rescale it back to an 8bit integer image    
    return np.uint8(cv2.addWeighted(face_part, 255.0, overlay_part, 255.0, 0.0))

有人可以帮助我吗?

0 个答案:

没有答案