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 被叠加到背景图的指定位置,与背景图的像素融合,看起来像是原始图像的一部分。
相关推荐
加油吧zkf4 分钟前
YOLO目标检测数据集类别:分类与应用
人工智能·计算机视觉·目标跟踪
叹一曲当时只道是寻常6 分钟前
Python实现优雅的目录结构打印工具
python
Blossom.11826 分钟前
机器学习在智能制造业中的应用:质量检测与设备故障预测
人工智能·深度学习·神经网络·机器学习·机器人·tensorflow·sklearn
天天扭码31 分钟前
AI时代,前端如何处理大模型返回的多模态数据?
前端·人工智能·面试
难受啊马飞2.040 分钟前
如何判断 AI 将优先自动化哪些任务?
运维·人工智能·ai·语言模型·程序员·大模型·大模型学习
顺丰同城前端技术团队41 分钟前
掌握未来:构建专属领域的大模型与私有知识库——从部署到微调的全面指南
人工智能·deepseek
许泽宇的技术分享44 分钟前
用.NET9+Blazor+Semantic Kernel,打造企业级AI知识库和智能体平台——AntSK深度解读
人工智能
hbwhmama1 小时前
python高级变量XIII
python
烟锁池塘柳01 小时前
【深度学习】强化学习(Reinforcement Learning, RL)主流架构解析
人工智能·深度学习·机器学习
一尘之中1 小时前
全素山药开发指南:从防痒处理到高可用食谱架构
人工智能