当前位置: 首页 > 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的混乱空间

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 计网day5
  • 已解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法
  • JAVA工程师面试专题-JVM篇
  • notepad++的下载与使用
  • Maven setting.xml 配置
  • Job 和 DaemonSet
  • MySQL安装教程(详细版)
  • JavaScript:防抖与节流
  • C# 中的回调函数
  • 【笔记】【算法设计与分析 - 北航童咏昕教授】绪论
  • v-rep插件
  • AWS Elastic Beanstalk通过单实例配置https
  • 【STM32 CubeMX】adxl345加速度传感器
  • 面试经典150题 -- 链表 (总结)
  • EasyCaptcha,开源图形验证码新标杆!
  • const let
  • CSS 提示工具(Tooltip)
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 回顾 Swift 多平台移植进度 #2
  • 计算机常识 - 收藏集 - 掘金
  • 来,膜拜下android roadmap,强大的执行力
  • 日剧·日综资源集合(建议收藏)
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 学习笔记TF060:图像语音结合,看图说话
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • Spring第一个helloWorld
  • 阿里云移动端播放器高级功能介绍
  • # Maven错误Error executing Maven
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #HarmonyOS:基础语法
  • #大学#套接字
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十六)视图变换 正交投影 透视投影
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (一)Docker基本介绍
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)原始图像数据和PDF中的图像数据
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .net 反编译_.net反编译的相关问题
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • @Autowired @Resource @Qualifier的区别
  • @Autowired和@Resource的区别
  • @PostConstruct 注解的方法用于资源的初始化
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [Android Pro] Notification的使用