图片添加水印处理
1. 引言
图像处理中的水印添加是一种常见的操作,用于在图片上叠加一些信息或标识。本文将介绍如何使用OpenCV库在图片上添加水印,并通过详细的代码注释来解释每一步的操作。
2. 代码示例
以下是一个使用OpenCV库的简单代码示例,演示了如何在图片上添加水印:
import cv2
import numpy as np
# 读取原始图片
img = cv2.imread("img.png")
# 将图像类型转换为float16,以便后续处理
img = img.astype(np.float16)
# 读取水印图片
shuiyin_img = cv2.imread('shuiyin.png')
# 指定水印位置
shuiyin_pos = [80, 50]
# 在原图上叠加水印
img[shuiyin_pos[0]:shuiyin_pos[0] + shuiyin_img.shape[0], shuiyin_pos[1]:shuiyin_pos[1] + shuiyin_img.shape[1], :] += shuiyin_img
# 处理超过255的像素值,将其设为255
index = img >= 255
img[index] = 255
# 将图像类型重新转换为uint8
img = img.astype(np.uint8)
# 显示带水印的图片
cv2.imshow("img", img)
cv2.waitKey(0)
# 保存处理后的图片
cv2.imwrite('result.png', img)
- 代码运行效果:
3. 代码解释
3.1 读取原始图片
img = cv2.imread("img.png")
通过cv2.imread
函数读取原始图片,将其赋值给变量img
。
3.2 图像类型转换
img = img.astype(np.float16)
将原始图片的数据类型转换为float16
,这是为了在后续的处理中避免像素值溢出。
3.3 读取水印图片
shuiyin_img = cv2.imread('shuiyin.png')
使用cv2.imread
函数读取水印图片,将其赋值给变量shuiyin_img
。
3.4 叠加水印
img[shuiyin_pos[0]:shuiyin_pos[0] + shuiyin_img.shape[0], shuiyin_pos[1]:shuiyin_pos[1] + shuiyin_img.shape[1], :] += shuiyin_img
在原始图片的指定位置上叠加水印。
3.5 处理像素值超过255
index = img >= 255
img[index] = 255
处理叠加水印后可能超过255的像素值,将其设为255,避免溢出。
3.6 图像类型转换
img = img.astype(np.uint8)
将处理后的图像数据类型重新转换为uint8
。
3.7 显示图片
cv2.imshow("img", img)
cv2.waitKey(0)
通过OpenCV库的imshow
函数显示添加水印后的图片。
3.8 保存处理后的图片
cv2.imwrite('result.png', img)
使用cv2.imwrite
函数将添加水印后的图片保存为新的文件。
4. 结论
通过以上详细的代码注释,我们展示了如何使用OpenCV库在图片上添加水印的整个过程。这是一个简单而实用的图像处理技术,可以用于为图片增添特定信息或标识。
代码参考源自:Shady的混乱空间