将两个图像与 alpha 通道合并
merge two images with alpha channel
我有两张图片,一张有 Alpha 通道,另一张没有。因此,图像 A
和 B
的形状为 (x,y,4) 和 (x,y,3) 分别。
我想使用 python
将两个图像合并为一个张量,其中 B
是背景,A
是上面的图像。最终图像的形状必须为 (x, y, 3)。我试过 scikit-image 或 cv2 是否能够做到这一点,但我找不到任何解决方案。
这里是 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)
上述解决方案有效,但我有一个更有效的解决方案:
alpha = A[:,:,3]
A1 = A[:,:,:3]
C = np.multiply(A1, alpha.reshape(x,y,1)) + np.multiply(B, 1-alpha.reshape(x,y,1))
我有两张图片,一张有 Alpha 通道,另一张没有。因此,图像 A
和 B
的形状为 (x,y,4) 和 (x,y,3) 分别。
我想使用 python
将两个图像合并为一个张量,其中 B
是背景,A
是上面的图像。最终图像的形状必须为 (x, y, 3)。我试过 scikit-image 或 cv2 是否能够做到这一点,但我找不到任何解决方案。
这里是 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)
上述解决方案有效,但我有一个更有效的解决方案:
alpha = A[:,:,3]
A1 = A[:,:,:3]
C = np.multiply(A1, alpha.reshape(x,y,1)) + np.multiply(B, 1-alpha.reshape(x,y,1))