0%

python添加图片盲水印

目前图片水印多采用非盲水印的方式,如微信公众号、博客等,显式的在图片的右下角添加文字或图片水印,该方式的水印易于去除(比如裁剪图片),无法很好的保障知识产权。

盲水印有很好的隐蔽性,在视觉上和原图几乎没有差别,在图片经过模糊、裁剪、噪音、旋转等处理后,仍然可以识别出来。

盲水印实现原理

我们假设原图为A,水印图为B,嵌入水印后的图片为C。

一般水印图B会远小于原图A,通过将原图A按照特定像素(如8*8像素)划分为n个区域,每个区域存储水印图B的一个像素,进而将整个水印图B隐藏在原图A中。

若水印B泄露,盗用者可在嵌入水印的图片C中针对性的试探,从而解除水印,常使用散列算法将水印B打散之后再嵌入到原图。

sanlie.png

盲水印的python实现

感谢大佬盲水印项目。https://github.com/fire-keeper/BlindWatermark

简单使用了下大佬的项目,实验结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 添加第一层水印,输出加水印后的文件out.jpg
root@blog:/tmp/shuiyin/BlindWatermark# python3 bwm.py -k 4399 2333 32 -em -r ../yuantu.jpg -wm ../shuiyin.png -o ../out.jpg -s
Namespace(block_shape=4, dwt_deep=1, embed=True, extract=False, key=[4399.0, 2333.0, 32.0], ori_img='../yuantu.jpg', output='../out.jpg', show_ncc=True, wm='../shuiyin.png', wm_shape=None)
0.9958481983804279
0.9981355013760809
0.9992727220378278
# 添加第二层水印,输出加水印后的文件out2.jpg,使用不同的随机数
root@blog:/tmp/shuiyin/BlindWatermark# python3 bwm.py -k 5467 3453 22 -em -r ../out.jpg -wm ../shuiyin2.png -o ../out2.jpg -s
Namespace(block_shape=4, dwt_deep=1, embed=True, extract=False, key=[5467.0, 3453.0, 22.0], ori_img='../out.jpg', output='../out2.jpg', show_ncc=True, wm='../shuiyin2.png', wm_shape=None)
0.9988060175703459
0.9993611612173993
0.9995504684476294
# 获取out.jpg中的水印
root@blog:/tmp/shuiyin/BlindWatermark# python3 bwm.py -k 4399 2333 32 -ex -r ../out.jpg -ws 88 155 -o ../out_wm.png
Namespace(block_shape=4, dwt_deep=1, embed=False, extract=True, key=[4399.0, 2333.0, 32.0], ori_img='../out.jpg', output='../out_wm.png', show_ncc=False, wm=None, wm_shape=['88', '155'])
# 获取out2.jpg中的第一层水印
root@blog:/tmp/shuiyin/BlindWatermark# python3 bwm.py -k 4399 2333 32 -ex -r ../out2.png -ws 88 155 -o ../out_wm2.png
Namespace(block_shape=4, dwt_deep=1, embed=False, extract=True, key=[4399.0, 2333.0, 32.0], ori_img='../out2.png', output='../out_wm2.png', show_ncc=False, wm=None, wm_shape=['88', '155'])

shiyan.png

xiangxi.png

可以看到,添加水印后的图片叫原图的大小增加了一些;使用该方式添加水印之后,使用全黑的水印进行二次添加水印,将无法分辩出原始水印。

参考:

https://github.com/fire-keeper/BlindWatermark
https://www.bilibili.com/video/av52047712/?p=1

扩展阅读:
阿里根据截图查到泄露者,用的什么黑科技?(数字盲水印)
腾讯云数据万象盲水印