blind_watermark
blind_watermark copied to clipboard
当打上水印的图片再次打上水印时的问题
使用项目中自带的二维码图片给这个图片打上水印
再次给上面打上水印的图片再次打上自己的二维码图片水印
成功解出了我的水印, 并且设置不同的密码依然可以覆盖
测试代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2
from blind_watermark import WaterMark
import os
os.chdir(os.path.dirname(__file__))
bwm = WaterMark(password_wm=123, password_img=123)
# 读取原图
bwm.read_img(filename='pic/ori_img.jpeg')
# 读取水印
bwm.read_wm('pic/watermark.png')
# 打上盲水印
bwm.embed('output/embedded.png')
wm_shape = cv2.imread('pic/watermark.png', flags=cv2.IMREAD_GRAYSCALE).shape
# 再次打水印
bwm = WaterMark(password_wm=1, password_img=1)
# 读取原图
bwm.read_img(filename='output/embedded.png')
# 读取水印
bwm.read_wm('pic/watermark2.png')
# 打上盲水印
bwm.embed('output/embedded2.png')
wm_shape = cv2.imread('pic/watermark2.png', flags=cv2.IMREAD_GRAYSCALE).shape
# %% 解水印
bwm1 = WaterMark(password_wm=1, password_img=1)
# 注意需要设定水印的长宽wm_shape
print(wm_shape)
bwm1.extract('output/embedded2.png', wm_shape=wm_shape, out_wm_name='output/wm_extracted.png', mode='img')
bwm1 = WaterMark(password_wm=123, password_img=123)
# 注意需要设定水印的长宽wm_shape
print(wm_shape)
bwm1.extract('output/embedded2.png', wm_shape=wm_shape, out_wm_name='output/wm_extracted2.png', mode='img')
当图片打上图片水印后再次打上文字水印, 图片水印将无法解出
当图片打上图片水印后再次打上文字水印, 图片水印将无法解出
我猜测应该是再次打上水印的时候破坏了频域特征。频域隐写无法抵御滤波攻击,这种攻击方式可以改变信号的频域特征以及同步性。这个水印的利用了频域特征,当再次打水印的时候又在原来的特征上再次做了变更,从另一方面考虑,其实就等同于实施了一次频域攻击。