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 被叠加到背景图的指定位置,与背景图的像素融合,看起来像是原始图像的一部分。
相关推荐
吴佳浩9 小时前
Python入门指南(五) - 为什么选择 FastAPI?
后端·python·fastapi
寰天柚子9 小时前
Java并发编程中的线程安全问题与解决方案全解析
java·开发语言·python
づ安眠丶乐灬10 小时前
计算机视觉中的多视图几何 - 1
人工智能·vscode·计算机视觉
2503_9284115610 小时前
项目中的一些问题(补充)
人工智能·python·tensorflow
MarkHD10 小时前
智能体在车联网中的应用 第1天 车联网完全导论:从核心定义到架构全景,构建你的知识坐标系
人工智能·架构
superman超哥10 小时前
仓颉语言中锁的实现机制深度剖析与并发实践
c语言·开发语言·c++·python·仓颉
中科米堆10 小时前
塑料制品企业部署自动化三维扫描仪设备,解决注塑件变形问题-中科米堆CASAIM
人工智能
vv_Ⅸ10 小时前
打卡day42
python
星图云10 小时前
从数据累积到精准解析:AI解译打造遥感数据高效利用新范式
人工智能·卫星遥感