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 被叠加到背景图的指定位置,与背景图的像素融合,看起来像是原始图像的一部分。
相关推荐
派葛穆6 分钟前
Python-批量安装依赖
开发语言·python
pchaoda7 分钟前
RSI与布林带技术指标实战
python·matplotlib·量化
哈__8 分钟前
CANN加速Image-to-Image转换:风格迁移与图像编辑优化
人工智能·计算机视觉
ujainu8 分钟前
解码昇腾AI的“中枢神经”:CANN开源仓库全景式技术解析
人工智能·开源·cann
番茄灭世神12 分钟前
Python从入门到精通 第一章
python
Elastic 中国社区官方博客13 分钟前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
组合缺一14 分钟前
Solon AI (Java) v3.9 正式发布:全能 Skill 爆发,Agent 协作更专业!仍然支持 java8!
java·人工智能·ai·llm·agent·solon·mcp
哈__15 分钟前
CANN: AI 生态的异构计算核心,从架构到实战全解析
人工智能·架构
B站_计算机毕业设计之家16 分钟前
豆瓣电影推荐系统 | Python Django Echarts构建个性化影视推荐平台 大数据 毕业设计源码 (建议收藏)✅
大数据·python·机器学习·django·毕业设计·echarts·推荐算法