
图片盲水印实践blind_watermark 3 分钟嵌入与提取【免费下载链接】blind_watermarkBlindInvisible Watermark 图片盲水印提取水印无须原图项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark从一次盗图说起刚发出去的原创照片被别人原样搬走想自证版权却拿不出证据——这是创作者常遇到的情况。如果图片在发布前就悄悄带着一段只有自己能解开的信息被搬走也能追回来。blind_watermark 这个开源项目做的就是这件事往图片里写入一段隐形水印提取时不依赖原图只需要那张被打过水印的图加上密码。下面直接动手。blind_watermark 安装与最小示例依赖只有 numpy、opencv、PyWavelets一行命令装好pip install blind-watermark装完自带一个命令行工具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注意第二条命令里的--wm_shape 111提取时必须知道水印的长度这个值在嵌入时已经打印出来了要自己记下来。如果习惯写代码Python 接口更灵活支持文字、图片、比特流三种水印内容from blind_watermark import WaterMark bwm WaterMark(password_img1, password_wm1) bwm.read_img(examples/pic/ori_img.jpeg) bwm.read_wm(这是一段水印, modestr) bwm.embed(out.png) len_wm len(bwm.wm_bit) # 记下长度提取时要传 bwm2 WaterMark(password_img1, password_wm1) print(bwm2.extract(out.png, wm_shapelen_wm, modestr))旋转、裁剪、加噪后水印还能提取吗项目的示例脚本 examples/example_str.py 内置了一组攻防测试水印是guofei9987 开源万岁三种有代表性的情况旋转 60° 再转回来调用att.rot_att正向旋转、反向旋转各一次对还原后的图提取结果与原文字完全一致。随机裁剪加缩放从图中剪出一块并缩放 0.7 倍模拟截图行为。知道裁剪参数时直接按参数补回不知道参数时recover.py里的estimate_crop_parameters能自动估计出裁剪区域和缩放比例再还原、提取同样拿到原文字。椒盐噪声5% 像素变白直接对被打噪的图提取无需任何预处理结果一致。遮挡、亮度调整、多方向裁剪等场景也都在同一脚本里覆盖断言全部通过。也就是说常规的图片传播损伤基本不影响使用。背后原理DWT-DCT-SVD 各做了什么核心算法在 blind_watermark/bwm_core.py流程分四步。先把图片转成 YUV对每个通道做 Haar 小波变换DWT取低频分量低频分量按 4×4 分块每块再做 DCT 变换到频率域然后对每块做 SVD 分解把水印位0/1以固定步长写进前两个奇异值上——步长d136、d220越大鲁棒性越强代价是图像失真越大最后逆 SVD、逆 DCT、逆 DWT 还原成像素。同一位水印还会循环写入所有块、三个通道各写一遍提取时取平均再聚类判位所以丢一部分块裁剪、遮挡也不至于全军覆没。实用提醒水印长度必须记牢extract的wm_shape是必填项CLI 里对应--wm_shape丢了就无法提取。密码要成对保管password_img决定水印写在哪些块、哪些位置password_wm决定比特顺序提取时两个都得一致。CLI 方式只设了password_img。图片尺寸决定容量可嵌入位数约等于(高/8) × (宽/8)图片太小或水印太长会直接抛溢出异常选载体前先算一下。先存 PNG 再走 JPEG嵌入后建议先存无损格式再压缩分发每多一道有损压缩容错余量就少一点。项目入口仓库地址需要 clone 时git clone https://gitcode.com/GitHub_Trending/bl/blind_watermark核心源码blind_watermark/bwm_core.py嵌入/提取算法、blind_watermark/blind_watermark.py对外 API中文文档与效果展示docs/zh/README.md完整攻防示例examples/example_str.py把水印写进图里再提取出来只需几行代码密码和长度记好这套流程就可以直接用在日常发布流程里了。【免费下载链接】blind_watermarkBlindInvisible Watermark 图片盲水印提取水印无须原图项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考