写出代码利用opencvPython给图片添加一个透明水印,已知水印是一个白底反向水印,把水印图片还原并去掉白底,加在图片的右下角
时间: 2024-09-09 13:15:55 浏览: 153
要使用OpenCV的Python接口给图片添加一个透明水印,首先需要确保你有一个白底反向的水印图片,即水印部分是黑色,背景是白色。以下是添加透明水印的大致步骤:
1. 读取原图和水印图片。
2. 将水印图片中的白色背景变透明(即去除白色背景)。
3. 计算水印在原图上的位置,通常是在右下角。
4. 将透明水印添加到原图上。
下面是一个简单的代码示例:
```python
import cv2
import numpy as np
# 读取原图和水印图片
original_image = cv2.imread('original_image.jpg')
watermark_image = cv2.imread('watermark_image.png')
# 将水印图片转换为灰度图
gray_watermark = cv2.cvtColor(watermark_image, cv2.COLOR_BGR2GRAY)
# 反转水印,将黑底白字变为白底黑字
inverted_watermark = 255 - gray_watermark
# 应用阈值,将大于阈值的部分设置为0(完全透明)
_, alpha_mask = cv2.threshold(inverted_watermark, 10, 255, cv2.THRESH_BINARY)
# 创建一个带有透明通道的背景(这里是黑色)
h, w = watermark_image.shape[:2]
background = np.zeros((h, w, 4), dtype=np.uint8)
background[:, :, 3] = 255 # 设置alpha通道的初始值为完全不透明
# 将水印和alpha通道结合
watermark = cv2.merge((watermark_image[:, :, :3], alpha_mask))
# 将水印添加到背景上
watermarked_background = cv2.add(watermark, background)
# 计算水印在原图上的位置(右下角)
h1, w1 = original_image.shape[:2]
h2, w2 = watermark_image.shape[:2]
x = w1 - w2
y = h1 - h2
# 在原图上添加水印
result = original_image.copy()
result[y:y+h2, x:x+w2] = cv2.addWeighted(result[y:y+h2, x:x+w2], 1, watermarked_background, 1, 0)
# 显示和保存结果
cv2.imshow('Watermarked Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('watermarked_image.jpg', result)
```
注意:这段代码假设你已经有了一个名为`original_image.jpg`的原始图片和一个名为`watermark_image.png`的水印图片。此外,水印图片的背景应为白色,以便通过阈值操作去除。
阅读全文