OpenCV实验:图片加水印

第二篇:图片添加水印(加 logo)


1. 实验原理

水印原理

  • 图片添加水印是图像叠加的一种应用,分为透明水印不透明水印
  • 水印的实现通常依赖于像素值操作 ,将水印图片融合到目标图片中,常用的方法包括:
    • 位运算:通过掩码(Mask)将目标区域清空,再将水印叠加到清空的区域。
    • Alpha 混合(Alpha Blending):通过加权计算将水印半透明地融合到目标图片。

步骤

  1. 将水印图片转为灰度图,并通过阈值处理生成二值化掩码。
  2. 利用掩码清空背景图像中水印位置的区域。
  3. 将水印图片嵌入到清空区域,完成水印添加。

2. 实验代码

以下为具体代码实现:

复制代码
import cv2

# 读取背景图像
img = cv2.imread("./background.jpeg")

# 读取两个 logo 图像
logo = cv2.imread("./logo.png")

# --------------------处理第一个 logo--------------------

# 将 logo 转换为灰度图像,用于后续的二值化处理
logo_gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)

# 对灰度图像进行二值化处理,生成二值掩码
_, logo_binary = cv2.threshold(
    logo_gray,             # 输入的灰度图像
    0,                     # 阈值(自动确定)
    255,                   # 二值化后的最大值
    cv2.THRESH_BINARY_INV  # 反阈值化,将前景变为黑色,背景变为白色
)

# 定义第一个 logo 的插入位置 (x1, y1)
x1, y1 = 10, 100

# 从背景图中截取一个与 logo 大小相同的 ROI(Region of Interest)区域
ROI = img[y1:y1+logo.shape[0], x1:x1+logo.shape[1]]

# 使用掩码进行位与运算,将 ROI 中对应 logo 的位置清空
ROI_logo = cv2.bitwise_and(ROI, ROI, mask=logo_binary)

# 将清空的 ROI 区域与 logo 图像进行加法操作,完成 logo 的融合
img_logo = cv2.add(ROI_logo, logo)

# 将融合后的 logo 替换回背景图的对应位置
img[y1:y1+logo.shape[0], x1:x1+logo.shape[1]] = img_logo

# --------------------显示最终结果--------------------

# 显示最终结果图像
cv2.imshow('image', img)

# 等待用户按键退出窗口
cv2.waitKey(0)

# 销毁所有窗口
cv2.destroyAllWindows()

3. 实验现象

实验结果

  1. 原始图片 :背景图为一个没有水印的图片。
  2. 水印图像 :Logo 被叠加到背景图的指定位置,与背景图的像素融合,看起来像是原始图像的一部分。
相关推荐
何以解忧,唯有..7 分钟前
Python time 模块详解:时间处理与日期操作指南
开发语言·python
淼澄研学8 分钟前
宇树H1机器人控制原理与Python SDK实操接入指南
人工智能
帅哥的AI自修课15 分钟前
弥合RAG语义鸿沟——从知识图谱到跨模态对齐的工程实践
人工智能·知识图谱
梅雅达编程笔记18 分钟前
Day 18 · 综合实战 B:AI 客服 Agent(专栏收官)
python·智能客服·ai agent·意图识别·ai客服·大模型应用·ai办公自动化
测试老哥40 分钟前
Pytest自动化测试框架tep环境变量、fixtures、用例三者之间的关系
自动化测试·软件测试·python·测试工具·测试用例·pytest·职场发展
Buke..1 小时前
【APP 逆向】哔哩哔哩 sign 参数逆向(下):OLLVM 混淆还原 sign 算法
java·javascript·爬虫·python·算法
'pi%'1 小时前
RAG系统的“最后一公里“:数据清洗、特征工程与向量化策略的工程化实践
人工智能
JacksonMx1 小时前
Java CompletableFuture 异步编程实战:从入门到架构师避坑指南
linux·数据库·python
tachibana21 小时前
性能指标的口径选择
数据库·人工智能·架构·大模型·llm
HIT_Weston1 小时前
183、【Agent】【OpenCode】TuiThreadCmd(JS&TS 历史)
人工智能·agent·opencode