opencv的add()和addWeighted()区别在于前者只能叠加,后者可以调节权重
add()法:
# dst = src* alpha + src2 * (1-alpha)
import cv2
import numpy as np
import random
# 人像
img = cv2.imread('face.jpg', 1)
print("shape of img:", img.shape)
# 花朵
img2 = cv2.imread('same_size.png', 1)
print("shape of img2:", img2.shape)
# 将人像与花朵融合
dst = cv2.add(img, img2)
cv2.imshow('face', img)
cv2.imshow('Mushroom', img2)
cv2.imshow('dst', dst)
cv2.waitKey(0)
效果如下:
相加的两者必须size一致,即shape信息如下:

人像与蘑菇的相加效果如下:

addWeighted()法:
# dst = src* alpha + src2 * (1-alpha)
import cv2
import numpy as np
import random
# 人像
img = cv2.imread('face.jpg', 1)
# 花朵
img2 = cv2.imread('1.jpg', 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
# 提取感兴趣范围ROI
roiH = int(height / 2)
roiW = int(width / 2)
# 抠图
imgROI = img[0 : roiH, 0 : roiW]
img2ROI = img2[0 : roiH, 0 : roiW]
# 将人像左上角即帽子部分与花朵融合,人像权重更大
# 参数:第一幅图像img:imgROI img的权重:a 第二幅图像img2:img2ROI img2的权重:1-a 重置的偏置项:0
dst = cv2.addWeighted(imgROI, 0.7, img2ROI, 0.3, 0)
cv2.imshow('face', img)
cv2.imshow('flower', img2)
cv2.imshow('dst', dst)
cv2.waitKey(0)
帽顶与花朵的融合效果如下:

网友评论