3 分钟看懂 blind_watermark:Python 图片盲水印嵌入与提取完整指南
【免费下载链接】blind_watermarkBlind&Invisible Watermark ,图片盲水印,提取水印无须原图!项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark
blind_watermark 是一个 Python 图片盲水印工具:它把水印信息藏进照片的频域背景里,肉眼几乎看不出,需要时又能原样取回;而且提取水印不用原图。这篇 blind_watermark 教程带你搞清三件事——它是干什么的、怎么装、怎么用,以及为什么它比贴个透明 logo 更靠谱。
图片被盗用后,你如何自证原创
你做好的设计图发上网,隔天就被别人拿去卖。想维权,却拿不出"这是我原创"的硬证据:可见水印一眼就被抹掉,而传统数字水印往往得拿着原图去比对,原图一旦丢了就无从下手。
盲水印正是为这种场景准备的。它先把信息偷偷埋进图里,事后再取出来对质,过程中你手里那张被处理过的图就是证据。
📌 它是什么:提取无需原图的 Python 图片盲水印
一句话:blind_watermark 是嵌进图片里的隐形水印,提取时不需要原始图片。
和可见水印相比,它不贴 logo、不盖字,肉眼基本看不出差别;和需要原图比对的传统水印相比,它只凭被处理过的图就能把信息解出来,适合"原图可能已经不在手上"的维权场景。它支持三种水印:文字、图片、比特流。
左是原图,右是嵌入水印后的图,两张看起来几乎一样,但右边已能取回完整水印信息。
🚀 一行命令安装 + 最小可用示例
依赖只有 numpy、opencv-python、PyWavelets 三个库,装包时会自动装好。支持 Windows、Linux、macOS,Python ≥ 3.5。
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第一条是嵌入,第二条是提取,--pwd是密码,提取时务必和嵌入时一致。想在代码里用,几行就够:
from blind_watermark import WaterMark bwm = WaterMark(password_img=1, password_wm=1) bwm.read_img('examples/pic/ori_img.jpeg') bwm.read_wm('你的水印文字', mode='str') bwm.embed('examples/output/embedded.png')嵌入后记下水印比特长度(等于水印比特数),提取时用它当wm_shape:
bwm = WaterMark(password_img=1, password_wm=1) print(bwm.extract('examples/output/embedded.png', wm_shape=6, mode='str'))接口见 WaterMark 主类,更多写法参考 完整测试示例。
🧪 旋转、噪声、缩放:被攻击后还能提取吗
仓库自带一组攻击测试:把打水印的图旋转 45 度、加椒盐噪声、缩放、裁剪、遮挡后再提取。示例中这些情况下都能把水印文字完整取回(具体成功率以仓库文档为准)。
攻击脚本在 att.py。
🔍 原理速览:DWT-DCT-SVD 是怎么藏进去的
不用记公式,记住三步。第一步,把图转成 YUV(一种把图拆成亮度加颜色通道的表示法),再做小波变换 DWT(把图拆成"低频背景 + 高频细节"),只动背景。频域可以理解为:不按每个像素、而按"变化快慢"来描述一张图。
第二步,把背景切成 4×4 小块,每块做余弦变换 DCT(把像素信息压成频率成分)。第三步,对每块做奇异值分解 SVD(把矩阵拆成几个代表主要信息的数值),把水印的 0/1 编码进最大的两个奇异值,再逆变换还原,人眼看不出差别。
抗攻击靠两点:同一个 0/1 会在许多块、三个通道里重复写入,提取时取平均,个别块被破坏也不影响整体;提取时再用密码把乱序还原。核心逻辑在 bwm_core.py,参数 d1、d2 用来在"更鲁棒"和"更清晰"之间权衡。
场景与选型建议:版权、溯源、防伪
- 版权保护:用文字水印
mode='str'写明署名加时间戳,被盗后一条提取命令即可当举证材料。 - 内容溯源:用图片水印
mode='img'嵌入二维码或编号,追踪内容在传播链上的流向。 - 防伪验证:用比特流
mode='bit'嵌入加密后的短数据,提取结果是 0~1 的浮点,自行卡阈值即可。
一句话收尾
blind_watermark 让你一行 pip 命令就能给图片加隐形水印,靠 DWT-DCT-SVD 三重变换藏在频域里,提取不用原图,还支持文字、图片、比特流三种模式。挑一张你真正在乎的图,照上面的最小示例跑一遍,几分钟就能亲眼确认:图被改了也拿得回来。
【免费下载链接】blind_watermarkBlind&Invisible Watermark ,图片盲水印,提取水印无须原图!项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考