随笔 - 22  文章 - 0  评论 - 0  阅读 - 12401

基于dwt(离散小波变换)实现彩色图像水印提取部分

基于dwt(离散小波变换)实现彩色图像水印嵌入部分_2.0

内容对应之前嵌入部分的代码。

复制代码
import cv2
import pywt
from PIL import Image

originalImg_path = '100_10.bmp'
processedImg_path = 'test.png'

originalImg = cv2.imread(originalImg_path)
originalImg = originalImg[:, :, [2, 1, 0]]

processedImg = cv2.imread(processedImg_path)
processedImg = processedImg[:, :, [2, 1, 0]]

R = originalImg.shape[0]
C = originalImg.shape[1]
RC_new = max(R, C)

originalImg = cv2.resize(originalImg, (RC_new, RC_new))
processedImg = cv2.resize(processedImg, (RC_new, RC_new))

(r1, g1, b1) = cv2.split(originalImg)
(r2, g2, b2) = cv2.split(processedImg)

coeffs1 = pywt.wavedec2(b1, 'db2', level=3)
[ca, (ch3, cv3, cd3), (ch2, cv2, cd2), (ch1, cv1, cd1)] = coeffs1

coeffs2 = pywt.wavedec2(b2, 'db2', level=3)
[cA, (cH3, cV3, cD3), (cH2, cV2, cD2), (cH1, cV1, cD1)] = coeffs2

#系数需与嵌入部分一一对应
CA1 = (cA - ca) * 10
CH1 = (cH3 - ch3) * 5
CV1 = (cV3 - cv3) * 10
CD1 = (cD3 - cd3) * 10

waterImg = pywt.waverec2([CA1, (CH1, CV1, CD1)], 'db2')

waterImg = Image.fromarray(waterImg)
waterImg = waterImg.resize((100, 100), Image.ANTIALIAS)
waterImg = waterImg.convert('RGB')
waterImg.save('watermark.bmp')
复制代码

嵌入和提取部分都确保了最终图像尺寸及色彩不变。

提取部分需要与原图进行对比才能得出最终结果,之后会继续改进算法,使得不经过原图也能进行提取。

水印嵌入后

 

 水印提取

 

 经图像增强后

 

 图像增强部分的代码之后,会根据小波原理进行重写,这里用到的是直方图均衡化。

posted on   HOr7z  阅读(369)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示