隐水印(watermark)使用文档
目录结构
项目目录
1 | ├── attr_test.py // 对图片攻击测试py文件 |
类及函数说明
图片嵌入水印(image_watermark.py):
在image_watermark.py中,定义函数encryption()、extract_watermark_from_image()。
encryption()函数为嵌入水印功能的实现。首先从本地目录读取input.txt水印文本,保存到long_text变量当中,之后读取原始图片test.jpg,使用opencv读取图片,获取到图片的参数,然后分别计算原始图片最多可容纳水印信息的容量与long_text转换为字节数的大小,之后将图片信息容量与文本字节容量进行比较,如果文本字节容量超过到图片信息容量,那么就将原始图片进行像素扩大以保证能够完整的嵌入全部的信息。最后调用WaterMark类进行水印嵌入操作。
1 | import math |
攻击测试类(watermark_attr.py):
在watermark_attr.py中,定义了GanWatermark类,默认情况下嵌入的水印为“深圳杯数学建模挑战赛”其中功能包含:不攻击情况下提取水印、压缩攻击并提取水印、变换格式攻击并提取水印、缩放攻击并提取水印、旋转攻击并提取水印、椒盐攻击并提取水印、遮挡攻击并提取水印、亮度攻击并提取水印。
1 | # -*- coding: utf-8 -*- |
测试攻击(attr_test.py):
在attr_test.py文件中,实例化GanWatermark类,分别调用类中攻击函数:
1 | import watermark_attr |
核心类(bwm_core.py):
WaterMarkCore类其中定义了嵌入图片的核心算法以及嵌入过程,此部分****基于blind_watermark库原作者的代码上修改为符合需求的功能。
1 | #!/usr/bin/env python3 |
运行
使用方法
水印嵌入:运行****image_watermark.py文件,将对input_img/test.jpg进行嵌入水印,嵌入水印后的图片保存在output_img/output_test.jpg(运行截图仅显示部分输出内容)
图片攻击:运行****attr_test.py,将对input_img/test.jpg进行各种图片攻击,攻击后的图片结果保存在output_img当中。
附录
**项目参考于GitHub开源仓库 **blind_watermark
原作者@guofei9987


