计算机视觉处理(OpenCV基础教学(十三):图像水印添加技术详解)

OpenCV基础教学(十三):图像水印添加技术详解

图像水印是保护版权和品牌标识的重要手段,本文将详细介绍如何使用OpenCV实现图像水印的添加,涵盖从基础到完整的实现过程。

总流程图:

一、图像水印技术概述

1.1 什么是图像水印?

图像水印是在不影响原始图像视觉效果的前提下,在图像中嵌入特定信息的技术。水印可以是可见的(如Logo、文字)或不可见的(数字水印),主要用于:

  1. 版权保护:标识图像所有权
  2. 品牌宣传:在图片上添加品牌Logo
  3. 信息隐藏:在图像中嵌入隐蔽信息
  4. 防伪标识:防止图像被非法使用

1.2 水印添加的基本原理

水印添加的核心是图像融合技术,即将水印图像与原始图像按照一定的规则进行混合。常见的融合方式包括:

  • 直接覆盖:简单叠加,可能影响原图质量
  • 透明叠加:通过透明度控制,平衡可见性和原图保留
  • 边缘融合:在边界处进行渐变融合,使过渡更自然

二、基础水印添加实现

2.1 完整代码解析

让我们从最基础的代码开始,逐步理解每个步骤:

python 复制代码
# 导入OpenCV的库
import cv2

# 1. 读取原始图像和模板图
image_np = cv2.imread('./lena.png')  # 读取原始图像
logo = cv2.imread('./logo.png')      # 读取Logo水印图像
cv2.imshow('原始图像', image_np)

# 获取logo图的大小
rows, cols = logo.shape[:2]  # 获取Logo的高度和宽度
print(f"Logo尺寸: 高度={rows}, 宽度={cols}")

# 截取原始图像的ROI区域(感兴趣区域)
# 这里我们选择在(100,100)位置放置Logo
roi = image_np[100:100 + rows, 100:100 + cols]
cv2.imshow('ROI区域', roi)

# 2. 对logo进行灰度化和二值化,制作成一张掩膜
logo_gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)  # 转为灰度图

# 阈值处理,创建掩膜
# THRESH_BINARY_INV:大于阈值的设为0,小于等于的设为255(反向二值化)
ret, mask = cv2.threshold(logo_gray, 127, 255, cv2.THRESH_BINARY_INV)
cv2.imshow('掩膜', mask)

# 3. 进行与运算
# 255的8位二进制全是1,它和任何8位整数做按位与运算,结果都等于这个整数本身
image_and = cv2.bitwise_and(roi, roi, mask=mask)
cv2.imshow('与运算结果', image_and)

# 4. 图像融合
dst = cv2.add(image_and, logo)

# 5. 将融合后的图像重新赋值到原始图像中
image_np[100:100 + rows, 100:100 + cols] = dst

# 6. 显示结果
cv2.imshow('Logo水印', logo)
cv2.imshow('最终结果', image_np)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 代码执行流程详解

步骤1:图像读取
python 复制代码
image_np = cv2.imread('./lena.png')
logo = cv2.imread('./logo.png')
  • 读取原始图像和水印Logo
  • 确保两个图像都存在,否则程序会出错
步骤2:获取ROI区域
python 复制代码
rows, cols = logo.shape[:2]
roi = image_np[100:100 + rows, 100:100 + cols]
  • logo.shape返回(高度, 宽度, 通道数)
  • 从原始图像中截取与Logo相同大小的区域
  • 这个区域将作为水印的放置位置
步骤3:创建掩膜
python 复制代码
logo_gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(logo_gray, 127, 255, cv2.THRESH_BINARY_INV)
  • 将彩色Logo转为灰度图
  • 使用阈值处理创建二值掩膜
  • THRESH_BINARY_INV:白色区域变为黑色,黑色区域变为白色
步骤4:与运算
python 复制代码
image_and = cv2.bitwise_and(roi, roi, mask=mask)
  • 使用掩膜对ROI区域进行与运算
  • 掩膜中黑色区域(值为0)会使对应位置的像素变为黑色
  • 掩膜中白色区域(值为255)会保留原图像素
步骤5:图像融合
python 复制代码
dst = cv2.add(image_and, logo)
  • 将处理后的ROI区域与Logo图像相加
  • 实现水印叠加效果
步骤6:替换原图区域
python 复制代码
image_np[100:100 + rows, 100:100 + cols] = dst
  • 将融合后的水印区域放回原图
  • 完成水印添加

三、核心函数详解

3.1 cv2.cvtColor() - 颜色空间转换

功能:将图像从一个颜色空间转换到另一个颜色空间。

常用转换

  • cv2.COLOR_BGR2GRAY:BGR转灰度
  • cv2.COLOR_BGR2RGB:BGR转RGB
  • cv2.COLOR_GRAY2BGR:灰度转BGR
python 复制代码
# 示例:各种颜色空间转换
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

3.2 cv2.threshold() - 阈值处理

功能:对图像进行二值化处理。

参数

  • src:输入图像(必须是灰度图)
  • thresh:阈值
  • maxval:最大值(当像素值超过阈值时赋予的值)
  • type:阈值类型

常用阈值类型

  • cv2.THRESH_BINARY:大于阈值设为maxval,否则设为0
  • cv2.THRESH_BINARY_INV:大于阈值设为0,否则设为maxval
  • cv2.THRESH_TRUNC:大于阈值设为阈值,否则不变
  • cv2.THRESH_TOZERO:大于阈值不变,否则设为0
python 复制代码
# 示例:各种阈值处理
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
ret, binary_inv = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)

3.3 cv2.bitwise_and() - 按位与运算

功能:对两个图像进行按位与运算。

参数

  • src1:第一个输入图像
  • src2:第二个输入图像
  • mask:可选掩膜

运算规则

  • 1 & 1 = 1
  • 1 & 0 = 0
  • 0 & 1 = 0
  • 0 & 0 = 0
python 复制代码
# 示例:与运算
result = cv2.bitwise_and(img1, img2)  # 无掩膜
result = cv2.bitwise_and(img1, img2, mask=mask)  # 带掩膜

3.4 cv2.add() - 图像加法

功能:将两个图像相加。

与普通加法的区别

  • 普通加法:超过255会溢出(255+1=0)
  • cv2.add():超过255会被截断为255(饱和操作)
python 复制代码
# 示例:图像加法
result = cv2.add(img1, img2)  # 饱和加法
result = img1 + img2  # 普通加法,可能溢出

四、总结

通过本文的学习,我们掌握了OpenCV中图像水印添加的核心技术:

核心知识点

  1. 基本流程:ROI提取 → 掩膜创建 → 与运算 → 图像融合
  2. 关键函数
    • cv2.cvtColor():颜色空间转换
    • cv2.threshold():阈值处理
    • cv2.bitwise_and():按位与运算
    • cv2.add():图像加法
  3. 水印类型:图像水印、文字水印、透明水印、平铺水印
  4. 实用技巧:位置计算、透明度控制、批量处理

水印添加是图像处理中的实用技术,掌握它可以帮助你在各种应用中保护版权和增强品牌识别度。


如果觉得本文有帮助,欢迎点赞、收藏、关注!
你的支持是我持续创作的最大动力!

相关推荐
minhuan19 小时前
大模型应用:联邦学习融合本地大模型:隐私合规推荐的核心流程与实践.62
大数据·人工智能·大模型应用·联邦学习推荐系统·推荐系统案例
落叶,听雪19 小时前
性价比高的软著助手供应商选哪家
大数据·人工智能·python
懒羊羊吃辣条19 小时前
充分利用未来已知信息:DAG 用双因果结构把 TSF-X 时序预测推到新高度
人工智能·深度学习·机器学习
易晨 微盛·企微管家19 小时前
汽车经销服务实战案例解析|企业微信AI SCRM助力实现咨询标准化与即时化
人工智能
阳艳讲ai19 小时前
九尾狐AI智能获客白皮书:重构企业增长新引擎
大数据·人工智能
老蒋每日coding19 小时前
AI Agent 设计模式系列(十二)—— 异常处理和恢复模式
人工智能·设计模式
人工智能AI技术19 小时前
【Agent从入门到实践】20 LLM的基础使用:API调用(OpenAI、国产大模型),程序员快速上手
人工智能·python
云上凯歌19 小时前
01_AI工具平台项目概述.md
人工智能·python·uni-app
qunaa010119 小时前
【深度学习】基于Sparse-RCNN的多类别蘑菇物种识别与检测系统_2
人工智能·深度学习·目标跟踪
薛不痒19 小时前
深度学习的补充
人工智能·深度学习