数字水印(DWT算法Python实现)

 全部代码:

"""-------------------------
Project:     DWT数字水印嵌入、提取
Author:      Tysay
Environment: Python3.8 + VsCode
History:     2022/12/01
-------------------------"""
import cv2
import pywt
import numpy as np
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']  # 替换sans-serif字体
plt.rcParams['axes.unicode_minus'] = False  # 解决坐标轴负数的负号显示问题class WaterMarkDWT:def __init__(self, origin: str, watermark: str, key: int, weight: list):self.key = keyself.img = cv2.imread(origin)self.mark = cv2.imread(watermark)self.coef = weightdef imshow(self, img, title='Img', size: tuple = None):if isinstance(img, str):img = cv2.imread(img)if size:img = cv2.resize(img, size)plt.imshow(img, cmap='gray')plt.title(title)plt.axis('off')plt.show()def arnold(self, img):# 获取图片的行、列r, c = img.shape# 构建一个全为0的矩阵,size和img一样p = np.zeros((r, c), np.uint8)a, b = 1, 1for k in range(self.key):for i in range(r):for j in range(c):  # arnold置换算法x = (i + b * j) % ry = (a * i + (a * b + 1) * j) % cp[x, y] = img[i, j]return pdef deArnold(self, img):r, c = img.shapep = np.zeros((r, c), np.uint8)a, b = 1, 1for k in range(self.key):for i in range(r):for j in range(c):  # 逆arnold置换算法x = ((a * b + 1) * i - b * j) % ry = (-a * i + j) % cp[x, y] = img[i, j]return pdef set(self, size: tuple = (1200, 1200)):# 将载体图片和水印图片都做resize处理Img = cv2.resize(self.img, size)waterImg = cv2.resize(self.mark, (size[0] // 2 + 1, size[1] // 2 + 1))# 载体图像灰度处理Img1 = cv2.cvtColor(Img, cv2.COLOR_RGB2GRAY)waterTmg1 = cv2.cvtColor(waterImg, cv2.COLOR_RGB2GRAY)# 对水印图像进行Arnold变换waterTmg1 = self.arnold(waterTmg1)# 载体图像三级小波变换c = pywt.wavedec2(Img1, 'db2', level=3)# 采用Haar小波进行三级小波分解,得到不同分辨率级下的多个细节子图和一个逼近子图[cl, (cH3, cV3, cD3), (cH2, cV2, cD2), (cH1, cV1, cD1)] = cwaterTmg1 = cv2.resize(waterTmg1, (size[0] // 4 + 1, size[1] // 4 + 1))# 水印图像一级小波变换d = pywt.wavedec2(waterTmg1, 'db2', level=1)[ca1, (ch1, cv1, cd1)] = d# 自定义嵌入系数(a1,a2,a3,a4 是对应的加权因子)a1, a2, a3, a4 = self.coef# 嵌入cl = cl + ca1 * a1cH3 = cH3 + ch1 * a2cV3 = cV3 + cv1 * a3cD3 = cD3 + cd1 * a4# 图像重构newImg = pywt.waverec2([cl, (cH3, cV3, cD3), (cH2, cV2, cD2), (cH1, cV1, cD1)], 'db2')newImg = np.array(newImg, np.uint8)# 保存图像cv2.imwrite('newImg.bmp', newImg)return newImgdef get(self, size: tuple = (1200, 1200), flag: int = None):# 原始图像灰度处理img = cv2.resize(self.img, size)img1 = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)img2 = cv2.cvtColor(self.mark, cv2.COLOR_RGB2GRAY)# 载体图像三级小波变换c = pywt.wavedec2(img2, 'db2', level=3)[cl, (cH3, cV3, cD3), (cH2, cV2, cD2), (cH1, cV1, cD1)] = c# 原始图像三级小波变换d = pywt.wavedec2(img1, 'db2', level=3)[dl, (dH3, dV3, dD3), (dH2, dV2, dD2), (dH1, dV1, dD1)] = d# 嵌入算法逆运算a1, a2, a3, a4 = self.coefca1 = (cl - dl) * a1ch1 = (cH3 - dH3) * a2cv1 = (cV3 - dV3) * a3cd1 = (cD3 - dD3) * a4# 水印图像重构waterImg = pywt.waverec2([ca1, (ch1, cv1, cd1)], 'db2')waterImg = np.array(waterImg, np.uint8)# 对提取的水印图像进行逆Arnold变换waterImg = self.deArnold(waterImg)# 设置卷积核kernel = np.ones((3, 3), np.uint8)if flag == 0:# 图像腐蚀处理waterImg = cv2.erode(waterImg, kernel)elif flag == 1:# 图像膨胀处理waterImg = cv2.dilate(waterImg, kernel)# 保存cv2.imwrite('waterImg.bmp', waterImg)return waterImg

实验结果:

from WaterMarkClass import WaterMarkDWTif __name__ == '__main__':# 读取载体图像、水印图像Img = 'DWTimage/Vector.bmp'waterImg = 'DWTimage/mark1.bmp'key = 10coef = [0.1, 0.2, 0.1, 0.1]# 水印嵌入W1 = WaterMarkDWT(Img, waterImg, key, coef)newimg = W1.set()W1.imshow(Img, '原图')W1.imshow(newimg, '带有水印的原图', (5285,2973))# 读取嵌入水印图像newImg = 'newImg.bmp'_coef = [10, 5, 10, 10]# 水印提取W2 = WaterMarkDWT(Img, newImg, key, _coef)wmark = W2.get()W2.imshow(waterImg, '原水印图')W2.imshow(wmark, '获取的水印图')

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28743.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

水印,数字水印,频域水印(隐形水印)很麻烦!用这个分分钟搞定!

水印,你在很多公司图片都会看到,里面都会加入图片都会有显式水印,或者半隐形水印。平常加水印,只要将两张图片色值混合就没问题了 import cv2 import numpy as np import matplotlib import matplotlib.pyplot as plt img cv2.…

什么是数字水印

经常有文章把数字签名和数字水印“傻傻分不清”,那今天就介绍一下数字水印。 一、数字水印技术原理 数字水印是一种信息隐藏技术,它利用人体感官的限制,将数字信号,如图像、文字、符号、数字等一切可以作为标记、标识的信息与原…

数字图像水印处理

数字图像水印处理 一个处理数字图像水印的系统,该系统可以实现添加可见水印,添加不可见水印,识别水印,提取可见水印,提取不可见水印,打开、保存图片等功能。(这里的水印识别指的是识别自己添加的水印) 添…

文心大模型3.5勇夺三个冠军领跑,中文完爆GPT-4!国际权威报告7项满分「全班第一」...

新智元报道 编辑:编辑部 【新智元导读】这场百模大战,究竟是谁胜出?国际权威IDC发布大模型技术报告中,文心大模型3.5拿下7个满分,三个绝对第一。 一觉醒来,好不热闹,Meta深夜投出重磅炸弹&…

文心一言APP来了

金磊 丰色 发自 凹非寺量子位 | 公众号 QbitAI 终于,正版百度文心一言APP上架苹果商店了! (此前百度因为盗版文心一言APP泛滥,还起诉过苹果公司及相关开发团队。) 这般“新鲜出炉”的工具,我们当然要率先体…

文心一言APP国区可下载!免费体验120+玩法,PPT大纲Excel公式一键生成

点击关注公众号:互联网架构师,后台回复 2T获取2TB学习资源! 上一篇:Alibaba开源内网高并发编程手册.pdf 终于,正版百度文心一言APP上架苹果商店了! (此前百度因为盗版文心一言APP泛滥&#xff0…

文心一言APP国区可下载,免费体验120+玩法,PPT大纲Excel公式一键生成

来源:量子位 | 公众号 QbitAI 终于,正版百度文心一言APP上架苹果商店了! (此前百度因为盗版文心一言APP泛滥,还起诉过苹果公司及相关开发团队。) 这般“新鲜出炉”的工具,我们当然要率先体验一把…

chatgpt赋能python:Python给电影打分-如何使用Python评估您最喜爱的电影

Python给电影打分 - 如何使用Python评估您最喜爱的电影 Python是一种流行的编程语言,广泛用于数据科学和机器学习。但是,您是否知道您可以使用Python为您最喜爱的电影打分并评估其受欢迎程度?在这篇文章中,我们将介绍如何使用Pyt…

文心千帆大模型平台,一站式企业级大模型平台

文心千帆大模型平台,一站式企业级大模型平台 0. 前言1. 人工智能发展历程1.1 传统机器学习1.2 深度学习1.3 大模型时代 2. 文心千帆2.1 文心千帆介绍2.2 文心千帆应用场景2.3 文心千帆平台优势 3. 文心千帆初体验3.1 注册流程3.2 创建应用3.3 在线测试3.4 数据服务3…

【自我升级链】所谓的傅盛认知升级

所有学习上的成功,都只依靠两件事 – 策略和坚持,而坚持本身就是最重要的策略! 前段时间读的书,看的一些文章里面,全都在提"认知"这个词。 但是,“认知”这个词,我是在2016年的时候就…

傅盛:AI是企业弯道超车的机会,大家在同一起跑线上

2019-10-20 11:58:08 第六届世界互联网大会于10月20日-22日在浙江乌镇召开。 猎豹移动CEO傅盛表示,从收入的相对值增长来看,猎豹的AI业务的增长还是挺快,“但是要短期内达到猎豹50亿级的盘子是不太可能的”。 傅盛认为,AI是企业弯…

从猎豹CEO傅盛和韩寒的没落,谈谈为什么曾经优秀的人突然变得平庸?

点赞再看,养成习惯,微信搜一搜【findyi】关注这个喜欢写情怀的程序员。 回复【1】获得程序员职场晋升PPT一份 一个读者的提问:洋哥,我从小都是学霸,本硕都是985,计算机科班出身,但进入职场后却始…

金山网络CEO傅盛: 产品设计, 简单才是王道

本文来自 http://www.36kr.com/p/151814.html 2012 年 9 月 8 日—9 日,中国软件开发者大会在北京国家会议中心举行,金山网络 CEO 傅盛在会上发表题为“简单唯美”的演讲,他表示,项目要想成功,产品设计一定要足够简单&…

傅盛认知三部曲之一:所谓成长就是认知升级

我一直在思索,怎么才能让一家公司更快地成长?一个人怎么才能从一群人的竞争当中脱颖而出? 1、人的四种认知状态 最近我看了一幅图,我在其上加了一个数字注脚。 这是一个人认知的四种状态——“不知道自己不知道”,“知…

【深度好文】强烈推荐:傅盛认知三部曲!

转载傅盛认知三部曲的原因 最近看到 傅盛 大佬关于认知的几篇文章,感觉实在牛逼,在此转载一下。 大家优先点击下面的几个链接查看原文吧!!!!!! 傅盛认知三部曲之一:所谓…

张鹏对话傅盛:产业互联网时代需要什么样的机器人?

12月21日,备受瞩目的极客公园创新大会十周年活动继续在北京举行。作为中国大型的创新者社区,全球科技、科学、文化艺术、创造力等领域里的科技主义者们在此汇聚一堂,共同为中国极客奉献思维升级的盛宴。猎豹移动董事长兼CEO傅盛受邀出席大会并…

傅盛:我为什么要不顾一切的努力?

猎豹最近不太好,刚被谷歌下架了45款产品。作为CEO,傅盛一定很难受,更要命的是,这次舆论站在了他的对立面,不少落井下石的人和媒体,一时间全部出动。 傅盛在360工作过,我加入360的时候恰逢傅盛和…

机器人军团和傅盛的答案

雷锋网消息,1月25日,傅盛再度卷入“人设崩塌”事件,起因为傅盛在自己公众号上发表了一篇名为《傅盛持续创新的十大“金句”》的文章,该文章由傅盛和极客公园创始人张鹏在2019 极客公园创新大会上谈话整理。此后引发与潘乱&#xf…

机器人军团和傅盛的答案

雷锋网消息,1月25日,傅盛再度卷入“人设崩塌”事件,起因为傅盛在自己公众号上发表了一篇名为《傅盛持续创新的十大“金句”》的文章,该文章由傅盛和极客公园创始人张鹏在2019 极客公园创新大会上谈话整理。此后引发与潘乱&#xf…

大模型创业:朱啸虎与傅盛的观点碰撞

在科技领域,大模型创业已经成为了一个热门的话题。随着AI技术的发展,大模型的应用越来越广泛,但同时也带来了一系列的挑战。最近,知名投资人朱啸虎和创业者傅盛就大模型创业的价值进行了一场激烈的讨论。本文将从他们的观点出发&a…