图片盲水印实战嵌入隐形版权声明被缩放、旋转后照样能提取【免费下载链接】blind_watermarkBlindInvisible Watermark 图片盲水印提取水印无须原图项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermarkblind_watermark 是一个 Python 图片盲水印项目它把版权信息隐进图片里肉眼看不见提取时只要打了水印的图、无须原图被缩放、旋转、遮挡后照样能取回来。适合摄影师、设计师、内容发布者。图片被盗时你如何自证归属 ️图片一被盗用你就没证据了。素材图被发到竞品网站署名都没了。原画被别人截图转存你连主张权利都拿不出东西。可见的水印 Logo 很好对付裁一刀就没了。盲水印解决的就是这两件事藏得看不见图被折腾过也能提取而且提取无须原图。先看效果原图与盲水印嵌入前后对比 ️先看结果判断值不值得学。下图是原图下一张嵌入了© All rights reserved。对比两张几乎看不出差别。版权信息藏在图像变换后的频域里肉眼不可见提取时只读打了水印的这张图就够了。盲水印怎么嵌入三条命令完成嵌入与提取 第一步准备环境。两条命令依赖装完即可。git clone https://gitcode.com/GitHub_Trending/bl/blind_watermark cd blind_watermark pip install .仓库里带现成示例图 examples/pic/不用先准备自己的素材。第二步嵌入并提取。把两段代码按顺序跑全程只有 8 行核心逻辑。from blind_watermark import WaterMark bwm WaterMark(password_img1, password_wm1) bwm.read_img(examples/pic/ori_img.jpeg) bwm.read_wm(版权所有 © All rights reserved, modestr) bwm.embed(examples/output/embedded.png) bwm2 WaterMark(password_img1, password_img1, password_wm1) wm bwm2.extract(examples/output/embedded.png, wm_shapelen(bwm.wm_bit), modestr) print(wm)两处注意点。一是 password_img 和 password_wm 两端必须一致这是提取的钥匙。二是提取必须告诉程序水印有多长wm_shape 用的就是嵌入时输出的位长度。算法主体在 blind_watermark.py基于 DWT-DCT-SVD。不想写 Python 的话装完就有现成命令行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第一条会打印水印位长度这句文本是 111第二条的 --wm_shape 就填这个数。换别的文字填实际打印的值。盲水印怎么验证跑一遍自带攻击脚本 ✅验证别靠肉眼跑项目自带的测试脚本python examples/example_str.py脚本先嵌入再依次模拟 8 种攻击旋转 45 度、随机裁剪、60 次随机遮挡、缩放、5% 椒盐噪声、亮度下调 10% 等每种攻击后都提取一次末尾用断言和原文逐字比对。跑完没有报错说明全部通过。完整流程参考 example_str.py。3 种水印模式怎么选文本、图片还是二进制 | 模式 | 嵌什么 | 提取时要提供 | 适合 | 代价 | | -- | -- | -- | -- | -- | | str 文本 | 声明、署名、联系方式 | 水印位长度 | 快速署名 | 中文每字占 12 bit长文案吃容量 | | img 图片 | Logo、黑白图案 | 水印图尺寸 (h, w) | 品牌标识 | 灰度按阈值 128 二值化图要黑白对比鲜明 | | bit 二进制 | 任意 0/1 序列 | 总位数 | 数据指纹、设备编号 | 需自备 0/1 数组不做字符串转换 |建议先用 str 模式跑通嵌 Logo 换 img嵌编号换 bit。三种模式共用同一套读写接口只改 mode 和水印形状迁移成本几乎为零。盲水印提取抗攻击效果8 种攻击逐一验证 ⚔️抗攻击是盲水印的主要卖点。上表 8 种攻击全部提取出完整原文其中旋转后的效果如下旋转、亮度这类可逆攻击提取前先反向操作即可。裁剪更麻烦因为少了原图做参照recover.py 提供参数估计函数能推测裁剪区域和缩放比例先还原再提取。边界也有两点要说清。鲁棒性和画质是一对取舍bwm_core.py 里 d1/d2 两个参数越大抗攻击越强但图像失真越大。容量上水印位必须小于图片可嵌入上限仓库里 738×1108 的示例图约为 1.27 万 bit。另外微信转发这类二次有损压缩不在已验证范围内别把盲水印当作法律纠纷的唯一证据高风险场景搭配时间戳或版权登记。新手最容易踩的 3 个坑 ⚠️忘了记水印长度。提取必须传 wm_shape长度忘了就取不出来。解法嵌入时打印出来存好命令行模式第一条命令会主动打印。嵌入和提取条件不一致。两端密码不同、或编码解码用了不同版本提取结果就是乱码。项目启动提示里专门写了 Make sure the version is the same别忽略。把带水印的图存成低质量 JPG。有损重压缩会破坏高频里的水印信息。项目示例流全程用 PNG 保存必须用 jpg 时embed() 有 compression_ratio 参数可以控制压缩质量别用默认低档。5 分钟动手现在就跑一遍 别再观望了5 分钟就够clone 仓库装上把 read_img 指向你自己的图跑完嵌入和提取你手上就有了第一张带隐形署名的图。三种模式的完整示例和攻击还原演示都在 examples/ 目录里照着改路径就行。今晚就把你的作品保护起来。【免费下载链接】blind_watermarkBlindInvisible Watermark 图片盲水印提取水印无须原图项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考