资讯动态

5分钟给图片加盲水印:不用原图也能提取的 blind_watermark 入门教程

发布时间:2026/9/12 15:59:14 来源:尧图企业网站定制
5分钟给图片加盲水印不用原图也能提取的 blind_watermark 入门教程【免费下载链接】blind_watermarkBlindInvisible Watermark 图片盲水印提取水印无须原图项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark辛辛苦苦做的图被搬运到别处连个出处都查不到防盗图这事明水印防君子不防小人P 两下就没了。今天要演示的blind_watermark图片盲水印工具正是解决这个问题的它把水印藏进图片的频域里肉眼完全看不见而提取时不需要原图凭密码就能把水印还原出来。读完这篇文章你就能给自己的图片打上一个抗裁剪、抗缩放、抗噪点的隐形水印。先搞清楚为什么叫盲水印盲提取提取水印时不依赖原图只靠打过水印的图 密码就能还原这是它和普通明水印最大的区别不可感知基于 DWT-DCT-SVD 变换把水印嵌入频域肉眼看不到任何痕迹鲁棒性旋转、裁剪、缩放、亮度调整、椒盐噪声之后依然能提取成功双密码机制password_img原图密钥password_wm水印密钥两者缺一不可防止他人恶意提取三种水印载体字符串、小图片logo、二进制位数组总有一款适合你动手之前准备清单✅ Python 3.5 环境依赖 numpy、opencv-python、PyWavelets安装时会自动带上✅ 装好工具包pip install blind-watermark或克隆后本地安装git clone https://gitcode.com/GitHub_Trending/bl/blind_watermark cd blind_watermark pip install .✅ 一张待加水印的测试图项目自带examples/pic/ori_img.jpeg738×1108✅ 可选一张小尺寸水印图项目自带examples/pic/watermark.png✅ 预留一个输出目录放生成结果如examples/output/最快上手路径命令行两行搞定不想写代码项目自带 CLI 工具嵌入和提取各一行命令# 把文字水印嵌入图片 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注意提取时--wm_shape要填水印的二进制长度。用字符串打水印时嵌入后程序会打印wm_bit的长度记下它提取时原样填进去即可。Python 实战嵌入并提取一段文字水印写进项目里更灵活。下面这套调用来自 字符串水印示例直接可以复用from blind_watermark import WaterMark bwm WaterMark(password_img1, password_wm1) bwm.read_img(examples/pic/ori_img.jpeg) bwm.read_wm(guofei9987 开源万岁, modestr) bwm.embed(examples/output/embedded.png) len_wm len(bwm.wm_bit) # 重要记下这个长度 # 提取不依赖原图 bwm1 WaterMark(password_img1, password_wm1) print(bwm1.extract(examples/output/embedded.png, wm_shapelen_wm, modestr))输出的就是当初嵌入的那段文字一个字符都不会差。核心算法实现可以看 bwm_core.py想深入原理再翻也不迟。选哪种水印一张表看清楚方案适用场景实现方式注意事项字符串modestr版权声明、联系方式、短链接read_wm(text, modestr)提取时传wm_shapelen_wm必须记住wm_bit的长度小图片无 mode 参数logo、二维码等图形水印read_wm(watermark.png)提取时传wm_shape(宽, 高)并指定out_wm_name提取结果是图片需给对 shape详见 图片水印示例位数组modebit机器可读标识、自定义协议read_wm([True, False, ...], modebit)提取出来是浮点数组需按 0.5 阈值转回布尔见 位数组示例进阶技巧与常见坑 ️坑 1提取出来是乱码→ 原因wm_shape填错。嵌入时水印长度是确定的提取时填多填少都会错位。 → 解法嵌入后立即把len(bwm.wm_bit)打印或落盘保存提取时原样传入。坑 2被截图/裁剪过的图提不出水印→ 原因裁剪 缩放改变了图像几何结构直接提取必然失败。 → 解法项目内置了还原模块先用estimate_crop_parameters推测裁剪参数再用recover_crop还原最后提取。完整流程在 example_str.py 的截屏攻击段落里照抄即可。场景推荐做法避坑点已知裁剪参数直接recover_crop还原后提取还原需要知道原图的 shape嵌入前顺手存一份未知裁剪参数estimate_crop_parameters先估参再还原耗时较长search_num可适当调小旋转 / 缩放 / 亮度 / 椒盐逆向恢复反向旋转、缩回原尺寸等后提取resize_att的out_shape是分辨率方向要颠倒坑 3两个密码看起来一样却提取失败→ 原因password_img和password_wm是两个独立密钥提取端必须与嵌入端逐一对应顺序填反、值不一致都会失败。 → 解法把两个密码写进配置文件统一管理别靠记忆。进阶玩法批量处理时给WaterMark(...)传processes参数开启多进程集成到自己的 Web 项目时可以参照 不落盘示例全程用 numpy 数组读写不把图片写到磁盘。现在就可以试起来打开终端把上面 CLI 那两行命令原样跑一遍亲眼验证看不见的水印能被提出来换成自己的图嵌入一句你的名字再用裁剪工具随便剪一刀按坑 2的解法把水印救回来水印这件事看不见才是最强的存在感。打上第一个盲水印的那一刻你的图才算真正有了指纹 【免费下载链接】blind_watermarkBlindInvisible Watermark 图片盲水印提取水印无须原图项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价