当前位置: 首页 > news >正文

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

图片添加水印处理

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的混乱空间

http://www.lryc.cn/news/303015.html

相关文章:

  • Milvus数据库介绍
  • notepad++的下载与使用
  • 论UI的糟糕设计:以百度网盘为例
  • 【Spring】三级缓存
  • CVE-2016-3088(ActiveMQ任意文件写入漏洞)
  • 270.【华为OD机试真题】字符串拼接(深度优先搜索(DFS)-JavaPythonC++JS实现)
  • 线阵相机参数介绍之轴编码器控制
  • 【JavaEE】_HTTP响应
  • SQL防止注入工具类,可能用于SQL注入的字符有哪些
  • 【数学建模入门】
  • ansible剧本中的角色
  • weblog项目开发记录--SpringBoot后端工程骨架
  • axios封装终极版实现token无感刷新及全局loading
  • 推荐一个内网穿透工具,支持Windows桌面、Linux、Arm平台客户端
  • 【linux】vim多行操作命令
  • vue-router钩子函数有哪些?都有哪些参数?
  • 基于JavaWeb开发的小区车辆登记系统计算机毕设[附源码]
  • 【开源】SpringBoot框架开发高校宿舍调配管理系统
  • 高压开关柜实现无线测温监测的关键点
  • 在线图片生成工具:定制化占位图片的利器
  • 闭包----闭包的理解、优点
  • jenkins的nmp install命令无法下载包
  • Collection集合体系(ArrayList,LinekdList,HashSet,LinkedHashSet,TreeSet,Collections)
  • Job 和 DaemonSet
  • C++ 二维前缀和 子矩阵的和
  • 第六届计算机科学与技术在教育中的应用国际会议(CSTE 2024)
  • Vue3学习——标签的ref属性
  • 数字化转型导师坚鹏:政府数字化转型之数字化技术
  • go build
  • 力扣238和169