我有两张图片,一张带有alpha通道,另一张没有alpha通道。因此,图像A
和B
的形状分别为(x,y,4)和(x,y,3)。
我想使用python
在单个张量中合并两个图像,其中B
是背景,A
是上图。最终图像的形状必须为(x,y,3)。我试过,如果scikit-image或cv2能够做到这一点,但我找不到任何解决方案。
答案 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))