合并两个图像与alpha通道

时间:2018-04-09 16:29:24

标签: python scikit-image cv2

我有两张图片,一张带有alpha通道,另一张没有alpha通道。因此,图像AB的形状分别为(x,y,4)(x,y,3)

我想使用python在单个张量中合并两个图像,其中B是背景,A是上图。最终图像的形状必须为(x,y,3)。我试过,如果scikit-image或cv2能够做到这一点,但我找不到任何解决方案。

2 个答案:

答案 0 :(得分:2)

这里是python中的alpha混合

import numpy as np
import cv2

alpha = 0.4

img1 = cv2.imread('Desert.jpg')
img2 = cv2.imread('Penguins.jpg')

#r,c,z = img1.shape

out_img = np.zeros(img1.shape,dtype=img1.dtype)
out_img[:,:,:] = (alpha * img1[:,:,:]) + ((1-alpha) * img2[:,:,:])
'''
# if want to loop over the whole image
for y in range(r):
    for x in range(c):
        out_img[y,x,0] = (alpha * img1[y,x,0]) + ((1-alpha) * img2[y,x,0])
        out_img[y,x,1] = (alpha * img1[y,x,1]) + ((1-alpha) * img2[y,x,1])
        out_img[y,x,2] = (alpha * img1[y,x,2]) + ((1-alpha) * img2[y,x,2])
'''

cv2.imshow('Output',out_img)
cv2.waitKey(0)

答案 1 :(得分:0)

上述解决方案有效,但我的效率更高:

alpha = A[:,:,3]
A1 = A[:,:,:3]

C = np.multiply(A1, alpha.reshape(x,y,1)) + np.multiply(B, 1-alpha.reshape(x,y,1))