python脚本实现盲水印提取和添加

python脚本实现盲水印提取和添加
首先github上找个BlindWaterMark-master文件下载一下,打开后是我这个样子
在这里插入图片描述
在python里面添加两个库,python.exe目录上方输入cmd

pip install opencv-python
python.exe -m pip install matplotlib

在这里插入图片描述
在这里插入图片描述
新手这里装库的时候,比如python你装在d盘,下载的库跑到c盘去了,这原因是你下载了不止一个python,win10的电脑,在这里输入python右击python.11,如果你有好几个比如python 3.10 还有python 3.9 ->右击->打开文件位置,如果你现在用的是python 3.11 那么把你不用的python版本删了,我这里已经删过了
不用的python版本删了之后,下载的库就自动保存到你用的python文件里面了
在这里插入图片描述
在这里插入图片描述
库装好之后开始操作

盲水印添加
将盲水印wm.png添加进图片hui.png中,形成一个新的合成图片3.png
wm.png

hui.png
在python目录输入cmd,将python.exe拖进来,然后如果你用的是python3版本就将之前github里面下载的BlindWaterMark-master文件夹里面的bwmforpy3.py拖进来,用的是python2版本就将bwm.py拖进来
在这里插入图片描述

在这里插入图片描述

然后输入encode 将图片hui.png拖进来,按个空格然后将wm.png拖进来 最后 按个空格然后合成的图片名3.png

D:\python11>python.exe F:\tools\wordhide\BlindWaterMark-master\bwmforpy3.py encode  F:\tools\wordhide\BlindWaterMark-master\hui.png F:\tools\wordhide\BlindWaterMark-master\wm.png 3.png

在这里插入图片描述
成功后的界面,图片是保存在python目录里面的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
盲水印提取
提取用的命令是decode
输入python.exe 将这个拖进来 然后输入decode,将有水印的3.png拖进来以及hui.png拖进来 最后输入一个输出的图片名4.png
在这里插入图片描述

D:\python11>python.exe  F:\tools\wordhide\BlindWaterMark-master\bwmforpy3.py decode D:\python11\3.png F:\tools\wordhide\BlindWaterMark-master\hui.png 4.png

在这里插入图片描述
在这里插入图片描述
打开4.png后是这个样子
在这里插入图片描述

最后附加一个问题大家可以一起讨论
最后加上这个–oldseed parameter 导致报错,有没有大佬能给出解决方法

D:\python11>python.exe  F:\tools\wordhide\BlindWaterMark-master\bwmforpy3.py decode D:\python11\3.png F:\tools\wordhide\BlindWaterMark-master\hui.png 5.png --oldseed parameter

 File "F:\tools\wordhide\BlindWaterMark-master\bwmforpy3.py", line 179, in <module>
    random.shuffle(m,random=random.random)
TypeError: Random.shuffle() got an unexpected keyword argument 'random'

在这里插入图片描述
关于python实现盲水印的提取和添加就写到这,希望对老铁们有帮助

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Python实现数字水印的嵌入和提取,需要用到一些相关的第三方库,比如Pillow、numpy、scikit-image等。下面是数字水印的嵌入和提取的基本步骤: 1. 数字水印的嵌入 (1)读取原始图像,将其转化为灰度图像。 (2)生成数字水印,比如一个二进制序列或者一个字符串。 (3)对数字水印进行加密处理,比如使用AES算法进行加密。 (4)将加密后的数字水印嵌入到图像中,比如使用DWT离散小波变换将数字水印嵌入到LL分量中。 (5)保存嵌入了数字水印的图像。 2. 数字水印提取 (1)读取嵌入了数字水印的图像。 (2)对图像进行DWT离散小波变换,提取出LL分量。 (3)对LL分量进行逆DWT离散小波变换,得到包含数字水印的图像。 (4)从图像中提取数字水印,比如使用AES算法进行解密。 (5)判断提取出的数字水印是否与原始数字水印一致。 下面是一个简单的Python代码示例,实现数字水印的嵌入和提取: ```python from PIL import Image import numpy as np from skimage import io from Crypto.Cipher import AES import binascii # 嵌入数字水印 def embed_watermark(image_path, watermark, key): # 读取原始图像 image = Image.open(image_path).convert('L') # 将图像转化为numpy数组 image_array = np.array(image) # 生成数字水印 watermark_bin = ''.join(format(ord(c), '08b') for c in watermark) # 将数字水印转化为numpy数组 watermark_array = np.array(list(watermark_bin), dtype=int).reshape((len(watermark_bin), 1)) # 加密数字水印 cipher = AES.new(key.encode(), AES.MODE_EAX) nonce = cipher.nonce ciphertext, tag = cipher.encrypt_and_digest(watermark_bin.encode()) # 将加密后的数字水印嵌入到图像中 watermark_size = len(ciphertext) image_array[:watermark_size, :watermark_size] |= (ciphertext.reshape((watermark_size, 1, 1)) >> np.arange(8)[::-1]) & 1 # 保存嵌入了数字水印的图像 io.imsave('watermarked_image.png', image_array) print('数字水印嵌入成功!') # 提取数字水印 def extract_watermark(image_path, key): # 读取嵌入了数字水印的图像 image_array = io.imread(image_path) # 提取数字水印 watermark_size = 16 ciphertext = np.packbits(image_array[:watermark_size, :watermark_size] & 1, axis=-1).reshape((watermark_size,)) cipher = AES.new(key.encode(), AES.MODE_EAX, nonce=ciphertext[:8]) watermark_bin = cipher.decrypt(ciphertext[8:]) # 解密数字水印 plaintext = binascii.unhexlify(watermark_bin.decode('utf-8')) print('提取的数字水印为:', plaintext) # 测试 key = '1234567890123456' watermark = 'Hello, world!' embed_watermark('test_image.png', watermark, key) extract_watermark('watermarked_image.png', key) ``` 在上述代码中,我们使用了AES算法对数字水印进行加密和解密,用DWT离散小波变换将数字水印嵌入到LL分量中,使用Pillow、numpy、scikit-image等第三方库读取和保存图像,提取数字水印时,需要注意提取的密文前8个字节是随机数,用于初始化AES算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值