在使用opencv制作图像透明遮盖(掩膜)的时候,发现使用PPT保存的png图片不是透明的,带有的颜色会遮住背景。
输出图像后发现,ppt保存的png图片中,透明区域的三通道像素为129,129,129,导致不能透明,使用opencv处理:
img = cv2.imread('test.png')
#修改ppt保存的图片为透明色
print(img,img.shape)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
p=img[i][j]
if p[0] == 129 and p[1]==129 and p[2]==129:
p[0]=0
p[1]=0
p[2]=0
cv2.imwrite('test_new.png',img)
顺便附上图像叠加的代码,前景透明LOGO:
img1 = cv2.imread('背景图.jpg')
img2 = cv2.imread('前景.png')
rows, cols = img2.shape[:2]
roi = img1[:rows, :cols]
# 创建掩膜
img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)
# 保留除前景外的背景
img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
dst = cv2.add(img1_bg, img2) # 进行覆盖
# 融合后放在原图上
cv2.imshow('img_add',dst)
cv2.waitKey()
cv2.destroyAllWindows()
网友评论