基于图像蒙版的OpenCV overlay 2图像

时间:2019-04-03 18:32:01

标签: python opencv

我需要在第三个图像蒙版的基础上叠加2张图像

示例 1.-我有这个背景

background

2.-我有这个物体图像,也有解分段图像

对象图像 enter image description here

我尝试基于第三张图像(蒙版图像)合并Backgound和Object图像

(蒙版图像) enter image description here

最终结果是背景图像+对象图像(仅基于蒙版) 任何想法.. 我尝试过

import cv2
added_image = cv2.addWeighted(back_img,0.4,aug_demoimage,0.1,0)

但是没有按预期工作。.有任何建议吗?谢谢!

2 个答案:

答案 0 :(得分:0)

您需要将对象图像转换为RGBA图像,其中alpha通道是您创建的蒙版图像。完成此操作后,您可以将其粘贴到背景图片中。

def convert_to_png(img, a):
    #alpha and img must have the same dimenstons

    fin_img = cv2.cvtColor(img, cv2.COLOR_RGB2RGBA)
    b, g, r, alpha = cv2.split(fin_img)
    alpha = a
#    plt.imshow(alpha);plt.title('alpha image');plt.show()
#    plt.imshow(img);plt.title('original image');plt.show()
#    plt.imshow(alpha);plt.title('fin alpha image');plt.show()
    fin_img[:,:, 0] = img[:,:,0]
    fin_img[:,:, 1] = img[:,:,1]
    fin_img[:,:, 2] = img[:,:,2]
    fin_img[:,:, 3] = alpha[:,:]
#    plt.imshow(fin_img);plt.title('fin image');plt.show()
    return fin_img

此功能会将两张图像合并为RGBA图像。

y1, y2 = new_loc[1], new_loc[1] + img.shape[0]
x1, x2 = new_loc[0], new_loc[0] + img.shape[1]

alpha_s = img[:, :, 3] / 255.0
alpha_l = 1.0 - alpha_s

for c in range(0, 3):
    fin_img[y1:y2, x1:x2, c] = (alpha_s * img[:, :, c] +
                              alpha_l * img[y1:y2, x1:x2, c])

这会将对象图像复制到背景图像

答案 1 :(得分:0)

已解决

def get_only_object(img, mask, back_img):
    fg = cv2.bitwise_or(img, img, mask=mask)        
    #imshow(fg)
    # invert mask
    mask_inv = cv2.bitwise_not(mask)    
    #fg_back = cv2.bitwise_or(back_img, back_img, mask=mask)
    fg_back_inv = cv2.bitwise_or(back_img, back_img, mask=mask_inv)
    #imshow(fg_back_inv)
    final = cv2.bitwise_or(fg, fg_back_inv)
    #imshow(final)

    return final