基于频域的数字盲水印blind-watermark

基于频域的数字盲水印技术是一种通过将水印信息嵌入到图像的频率域中来实现版权保护和内容认证的技术。以下是其核心要点:

基本原理

  1. 频域转换‌:通过傅里叶变换(DFT)、离散余弦变换(DCT)或离散小波变换(DWT)将图像从空域转换到频域‌12。
  2. 水印嵌入‌:将水印信息(如二进制数据、文本或图像)嵌入到频域的中高频系数中,利用人类视觉对高频不敏感的特性实现不可见性‌1。
  3. 鲁棒性设计‌:通过调整系数关系(如DCT系数的相对大小)或结合奇异值分解(SVD)增强抗攻击能力,抵抗压缩、裁剪、噪声等常见处理‌

数字盲水印blind-watermark源码:https://github.com/guofei9987/blind_watermark

安装

复制代码
pip install blind-watermark

命令行中使用

复制代码
# 嵌入水印:
blind_watermark --embed --pwd 1234 examples/pic/ori_img.jpeg "watermark text" examples/output/embedded.png
# 提取水印:
blind_watermark --extract --pwd 1234 --wm_shape 111 examples/output/embedded.png

python中使用

嵌入水印

python 复制代码
from blind_watermark import WaterMark

bwm1 = WaterMark(password_img=1, password_wm=1)
bwm1.read_img('pic/ori_img.jpg')
wm = '@guofei9987 开源万岁!'
bwm1.read_wm(wm, mode='str')
bwm1.embed('output/embedded.png')
len_wm = len(bwm1.wm_bit)
print('Put down the length of wm_bit {len_wm}'.format(len_wm=len_wm))

提取水印

python 复制代码
bwm1 = WaterMark(password_img=1, password_wm=1)
wm_extract = bwm1.extract('output/embedded.png', wm_shape=len_wm, mode='str')
print(wm_extract)
相关推荐
东莞市云毅网络有限公司3 分钟前
用 SQLite FTS5 给企业知识库做问答检索原型:中文二元切分与 BM25 排序
python·sqlite·自动化运维·geo·数据监测
星源~5 分钟前
zephyr-Linux环境下搭建步骤
linux·mcu·嵌入式开发·zephyr
承渊政道6 分钟前
PR-Agent鸿蒙PC适配全记录:从Python服务端代理到ArkTS原生评审客户端
python·华为·代理模式·agent·harmonyos·pc端
Huangjin007_7 分钟前
【Linux 系统篇(二十)】进程(八):进程创建、进程退出
linux·运维·服务器
Thomas.Sir7 分钟前
第49课:TensorFlow|项目性能调优全方案【训练提速、推理提速、资源占用优化】
人工智能·python·tensorflow
郝学胜-神的一滴10 分钟前
C++11 工程级应用 12:编译期类型魔法,干掉重复与臃肿的代码
开发语言·数据结构·c++·软件工程·visual studio
吴声子夜歌19 分钟前
Shell编程——开发规范
linux·运维·shell
m0_7345717620 分钟前
深入理解C++ 析构函数<四>虚析构函数
开发语言·c++
Shadow(⊙o⊙)22 分钟前
epoll三大接口到内核+正确认识应用层与内核的联系(6000字)
linux·服务器·网络
皓月盈江22 分钟前
Linux系统使用VSCode搭建GO开发环境
linux·vscode·ubuntu·golang·debian