基于频域的数字盲水印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)
相关推荐
MoonBit月兔几秒前
错过大赛报名?MoonBit 开源大赛- 8 月黑客松正式开启
开发语言·ai-native·moonbit
小猴子爱上树2 分钟前
一站式解决图片视频翻译难题的高效AI工具
人工智能·python·音视频
jsons115 分钟前
autofs挂载
linux·服务器·网络
weixin_5386019716 分钟前
智能体测开Day31
开发语言·python
lbb 小魔仙24 分钟前
Git + Python 项目工作流最佳实践:pre-commit、CI、CHANGELOG 自动化
git·python·ci/cd
liwulin050625 分钟前
【ollama】自定义结构化输出
linux·前端·数据库·ollama
dyxal29 分钟前
最长公共子序列(LCS)
python·算法
geovindu34 分钟前
java: Facade Pattern
java·开发语言·后端·外观模式·结构型模式
listening77735 分钟前
HarmonyOS 6.1 元服务深度优化:从“秒开”到“常驻”的极致体验
java·开发语言·spring
布朗克16837 分钟前
Go 入门到精通-29-测试与基准
开发语言·后端·golang·测试与基准