【Python】OpenCV-图片添加水印处理

图片添加水印处理

1. 引言

图像处理中的水印添加是一种常见的操作,用于在图片上叠加一些信息或标识。本文将介绍如何使用OpenCV库在图片上添加水印,并通过详细的代码注释来解释每一步的操作。

2. 代码示例

以下是一个使用OpenCV库的简单代码示例,演示了如何在图片上添加水印:

python 复制代码
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 读取原始图片

python 复制代码
img = cv2.imread("img.png")

通过cv2.imread函数读取原始图片,将其赋值给变量img

3.2 图像类型转换

python 复制代码
img = img.astype(np.float16)

将原始图片的数据类型转换为float16,这是为了在后续的处理中避免像素值溢出。

3.3 读取水印图片

python 复制代码
shuiyin_img = cv2.imread('shuiyin.png')

使用cv2.imread函数读取水印图片,将其赋值给变量shuiyin_img

3.4 叠加水印

python 复制代码
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

python 复制代码
index = img >= 255
img[index] = 255

处理叠加水印后可能超过255的像素值,将其设为255,避免溢出。

3.6 图像类型转换

python 复制代码
img = img.astype(np.uint8)

将处理后的图像数据类型重新转换为uint8

3.7 显示图片

python 复制代码
cv2.imshow("img", img)
cv2.waitKey(0)

通过OpenCV库的imshow函数显示添加水印后的图片。

3.8 保存处理后的图片

python 复制代码
cv2.imwrite('result.png', img)

使用cv2.imwrite函数将添加水印后的图片保存为新的文件。

4. 结论

通过以上详细的代码注释,我们展示了如何使用OpenCV库在图片上添加水印的整个过程。这是一个简单而实用的图像处理技术,可以用于为图片增添特定信息或标识。

代码参考源自:Shady的混乱空间

相关推荐
waterHBO18 分钟前
python 爬虫 selenium 笔记
爬虫·python·selenium
编程零零七1 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
2401_858286112 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
铁松溜达py2 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
everyStudy2 小时前
JavaScript如何判断输入的是空格
开发语言·javascript·ecmascript
AIAdvocate3 小时前
Pandas_数据结构详解
数据结构·python·pandas
小言从不摸鱼3 小时前
【AI大模型】ChatGPT模型原理介绍(下)
人工智能·python·深度学习·机器学习·自然语言处理·chatgpt
C-SDN花园GGbond4 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
迷迭所归处5 小时前
C++ —— 关于vector
开发语言·c++·算法
架构文摘JGWZ5 小时前
Java 23 的12 个新特性!!
java·开发语言·学习