需求:
利用alpha通道将a.png的人物移动到bg.png的背景中:
思路
1.使用cv2导入rgba通道的图片,获取alpha通道
2.a.png的alpha中只有255的值的地方被留下,其他地方全部填充为背景
3.使用cv2的imshow进行展示
代码:
# -*- coding:utf8 -*-
import cv2 as cv
import numpy as np
import datetime
create_time = datetime.datetime.now()
print("create_time: " + str(create_time))
imgA = cv.imread('images/a.png', cv.IMREAD_UNCHANGED)
imgSrcBg = cv.imread('images/bg.png', cv.IMREAD_UNCHANGED)
rows, cols, channels = imgA.shape
B, G, R, A = cv.split(imgA)
# cv.imshow('img',imgAlpha)
# # 不包含alpha通道
imgA = cv.imread('images/a.png')
imgMix = np.zeros([rows, cols, 3], dtype='uint8')
for i in range(rows):
for j in range(cols):
alpha = A[i][j] / 255
beta = 1 - alpha
# print (alpha)
for k in range(3):
temp = int(imgA[i, j, k]*alpha + imgSrcBg[i, j, k]*beta)
if temp > 255:
imgMix[i, j, 0] = 255
elif temp < 0:
imgMix[i, j, 0] = 0
else:
imgMix[i, j, k] = temp
# #
cv.imshow('image', imgMix)
finish_time = datetime.datetime.now()
print("finish_time: " + str(finish_time))
cv.waitKey(0)
cv.destroyAllWindows()
代码运行时间特别长(近半分钟):
效果: