用cv2制作一个图片的透明签名
时间: 2024-03-11 16:48:07 浏览: 39
下面是用cv2制作一个图片的透明签名的示例代码:
```
import cv2
import numpy as np
# 读入原始图片和签名图片
img = cv2.imread('input_image.png')
signature = cv2.imread('signature.png', cv2.IMREAD_UNCHANGED)
# 将签名图片缩放到指定的大小
signature = cv2.resize(signature, (100, 100))
# 提取签名图片的 alpha 通道作为掩码
mask = signature[:, :, 3]
# 反转掩码,将 alpha 通道中非零像素变成 0,零像素变成 255
mask = cv2.bitwise_not(mask)
# 将签名图片的 alpha 通道分离
signature_alpha = cv2.split(signature)[3]
# 将签名图片的 alpha 通道应用到掩码上,生成新的掩码
mask = cv2.bitwise_and(mask, signature_alpha)
# 将掩码转换为 BGR 格式,并复制到与原始图片大小相同的画布上
mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
signature_copy = np.zeros_like(img)
signature_copy[:mask.shape[0], :mask.shape[1]] = mask
# 将签名图片的 BGR 通道与原始图片叠加
result = cv2.addWeighted(img, 1, signature_copy, 0.5, 0)
# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这个代码会读入一个原始图片和一个透明的签名图片,将签名图片缩放到指定大小,并将签名图片的 alpha 通道作为掩码来实现透明效果。最后将签名图片与原始图片叠加,生成带有透明签名的新图片。你可以根据需要修改输入输出文件名、签名大小和叠加透明度等参数。运行代码后,可以在窗口中看到生成的带有透明签名的新图片。如果需要保存结果为图片,可以使用cv2.imwrite()函数将结果保存为图像文件。