当前位置: 首页 > news >正文

数字水印 | 离散小波变换 DWT 的 Python 代码实现

🍍原文: 【图像处理】图像离散小波变换及 Python 代码实现

🍍写在前面: 本文在原文的基础上补全了代码。



1 环境准备

① 安装 p y w t \mathsf{pywt} pywt 包:

pip install PyWavelets

说明: p y w t \mathsf{pywt} pywt d w t \mathsf{dwt} dwt 的库,全称是 P y W a v e l e t s \mathsf{PyWavelets} PyWavelets

② 安装 c v 2 \mathsf{cv2} cv2 包:

pip install opencv-python==3.4.5.20

说明: c v 2 \mathsf{cv2} cv2 用于将 RGB 图像转换为灰度图像。如果安装失败,则可能是 Python 版本和 opencv-python 不匹配。

注意:在 Python 的多版本环境中,使用 pip3.7 而非 pip 命令可以指定使用 Python37,对于其他 Python 版本也一样。否则可能出现安装成功,但 Pycharm 仍然找不到包的情况。



2 完整代码

关键代码就只有前几行,后面都是在画图:

import numpy as np
from matplotlib import pyplot as plt
import pywt
import PIL
import cv2img = PIL.Image.open("white_bear.jpg")
img = np.array(img)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
LLY, (LHY, HLY, HHY) = pywt.dwt2(img, 'haar')plt.subplot(1, 3, 1)
plt.title("Original", fontsize=12, loc="center")
plt.axis('off')
plt.imshow(img, cmap="Greys")plt.subplot(2, 3, 2)
plt.title("LL", fontsize=12, loc="center")
plt.axis('off')
plt.imshow(LLY, cmap="Greys")plt.subplot(2, 3, 3)
plt.title("HL", fontsize=12, loc="center")
plt.axis('off')
plt.imshow(HLY, cmap="Greys")plt.subplot(2, 3, 5)
plt.title("LH", fontsize=12, loc="center")
plt.axis('off')
plt.imshow(LHY, cmap="Greys")plt.subplot(2, 3, 6)
plt.title("HH", fontsize=12, loc="center")
plt.axis('off')
plt.imshow(HHY, cmap="Greys")plt.show()

上述代码在 p y w t . d w t 2 \mathsf{pywt.dwt2} pywt.dwt2 函数中使用的是哈尔 ( h a a r ) \mathsf{(haar)} (haar) 小波变换,它是由数学家哈尔·阿尔弗雷德于 1909 年所提出的函数变换,也是小波变换中最简单的一种变换。



相关文章:

数字水印 | 离散小波变换 DWT 的 Python 代码实现

🍍原文: 【图像处理】图像离散小波变换及 Python 代码实现 🍍写在前面: 本文在原文的基础上补全了代码。 1 环境准备 ① 安装 p y w t \mathsf{pywt} pywt 包: pip install PyWavelets说明: p y w t \…...

[框架] Unity 公共执行器

本篇我们通过使用单例模式来创建一个公共执行器,使得原本应该在Update()、FixedUpdate()中的指令都可以统一放在一个对象中执行,且可进行添加和移除操作。 1. 创建单例模式改造器:SingletonMono 我们先创建一个单例模式改造器,使…...

二进制转为HEX数组小工具

在使用RA8889时,JPG的解码只能从FLASH的DMA通道获取,那么如果要从远端、或者SD卡等处读取JPG图片出来显示怎么办? RA8889支持JPG图片硬解码,但数据流是从FLASH进行DMA读取的,然后再进行解码。因此这种情况下&#xff…...

数据结构-二叉树-红黑树

一、红黑树的概念 红黑树是一种二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,可以是Red或者BLACK,通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,…...

C++11 新特性 decltype 说明符

一、typeof与typeid 1.1、typeof 在C11标准之前,GCC已经提供了一个类似功能的运算符 typeof对类型进行推导,但是这毕竟是编译器的实现,不是标准。 int a 0; typeof(a) b 5;1.2、typeid C标准提供了 typeid 运算符,获取的类型…...

java线程局部变量使用方式

线程局部变量是Java中用于存储线程本地信息的变量。这种变量仅在线程的生命周期内存在,并且每个线程都有自己的一份拷贝。换句话说,线程局部变量是线程私有的,其他线程无法访问。 使用场景主要包括: 1. 存储线程状态信息&#xff…...

【隧道篇 / WAN优化】(7.4) ❀ 01. 启动WAN优化 ❀ FortiGate 防火墙

【简介】几乎所有的人都知道,防火墙自带的硬盘是用来保存日志,以方便在出现问题时能找到原因。但是很少的人知道,防火墙自带的硬盘其实还有另一个功能,那就是用于WAN优化。 防火墙自带的硬盘 在FortiGate防火墙A、B、C、D系列&…...

2024数维杯数学建模B题生物质和煤共热解问题的研究原创论文分享

大家好,从昨天肝到现在,终于完成了2024数维杯数学建模挑战赛B题的完整论文啦。 实在精力有限,具体的讲解大家可以去讲解视频: 2024数维杯数学建模B题煤共热解每一问高质量完整代码讲解!_哔哩哔哩_bilibili 2024数维杯…...

中国电子学会(CEIT)2022年12月真题C语言软件编程等级考试三级(含详细解析答案)

中国电子学会(CEIT)考评中心历届真题(含解析答案) C语言软件编程等级考试一级 2022年12月 编程题五道 总分:100分一、鸡兔同笼(20分) 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至…...

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月12日,星期日

每天一分钟,知晓天下事! 2024年5月12日 星期日 农历四月初五 1、 全国多地已推“一次挂号管三天”,部分医院专家门诊适用。 2、 在梅大高速塌方事故中拦车、救援,黄曼秋等5人拟确认为见义勇为。 3、 深圳新能源车指标申请条件调…...

微服务思想以及实现

文章目录 前言一、什么时候需要拆分微服务1. 创业型项目2. 大型项目 二、怎么拆1. 拆分目标2. 拆分方式 三、微服务之间远程调用1. 实现方式2. 手动发送Http请求(RestTemplate)3. 服务注册中心3.1 原理3.2 Nacos注册中心3.3 服务注册3.4 服务发现(Discov…...

C语法:格式符号%f和%lf引发的错误

今天编程时有如下代码: #include"stdio.h"int main(void) {double profit;double bonus;printf("请输入本月利润\n");scanf("%f",&profit);//错误:此行profit是double类型,格式符为%f,当输入8时&#xff0…...

Java基础入门day48

day48 JDBC调用关系 tomcat 简介 tomcat是Apache下的一个核心项目,免费开源,支持servlet和jsp。 tomcat技术先进,性能稳定,目前比较流行的web应用服务器 安装 官网: Apache Tomcat - Welcome! 下载 tomcat8.5 解压&a…...

C++笔记(体系结构与内核分析)

1.OOP面向对象编程 vs. GP泛型编程 OOP将data和method放在一起,目的是通过封装、继承、多态提高软件的可维护性和可扩展性GP将data和method分开,可以将任何容器与任何算法结合使用,只要容器满足塞饭所需的迭代器类型 2.算法与仿函数的区别 …...

c++ 唤醒指定线程

在C中,直接唤醒一个特定的线程并不像在Java的Thread类中有interrupt()方法或者某些操作系统特定的API(如POSIX的pthread_cond_signal或Windows的SetEvent)那样简单。C标准库没有提供一个直接的方法来"唤醒"一个正在等待的线程。然而…...

java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条

今天遇到一个问题 系统线上问题,经常出现这样的问题,刚重启系统时不报错了,可是运行一段时间又会出现。sql已经写了limit 1,mybatis的debug日志也返回total为1,可是却报错返回了1805条数据 乍一看,感觉太不…...

AI图书推荐:利用生成式AI实现业务流程超自动化

《利用生成式AI实现业务流程超自动化》(Hyperautomation with Generative AI)这本书探索了广泛的用例和示例,展示了超自动化在不同行业、领域和特定部门的多样化应用, 让您熟悉UiPath、Automation Anywhere和IBM等流行工具和平台&…...

什么事防抖和节流,有什么区别,如何实现

防抖和节流,本质上是优化高频率执行代码的一种手段,比如:resize、scroll、keypress、mousemove这些事件在触发的时候,会不断调用绑定在事件上的回调函数,这样极大浪费资源,降低前端性能。 为了优化体验&am…...

PanguSync大数据量初始化脚本

由于数据库增量同步软件PanguSync初始化最大超时时间为600s,如果初始数据量很大,第一次部署时可能会超时,可以先停止任务,使用以下Sql语句进行初始化,以下语句可以分步执行,初始化完成后,后续无需再执行耗时…...

DELL T630服务器iDRAC分辨率调整办法

对于Dell T630服务器的iDRAC分辨率调整,您需要登录到iDRAC的Web界面。以下是详细的步骤: 登录iDRAC:在浏览器中输入iDRAC的IP地址,然后使用用户名(通常是“root”)和密码登录。 导航到虚拟控制台&#xff…...

DFRDisplayKm 实用指南:Apple Touch Bar Windows支持常见问题全解析

DFRDisplayKm 实用指南:Apple Touch Bar Windows支持常见问题全解析 【免费下载链接】DFRDisplayKm Windows infrastructure support for Apple DFR (Touch Bar) 项目地址: https://gitcode.com/gh_mirrors/df/DFRDisplayKm DFRDisplayKm 是一款专为 Windows…...

音频合并避坑指南:为什么你的MP3拼接总有杂音?附FFmpeg解决方案

音频合并避坑指南:为什么你的MP3拼接总有杂音?附FFmpeg解决方案 当你尝试将多个MP3文件拼接成一个时,是否经常遇到以下问题:拼接处出现刺耳的杂音、音频卡顿或时间戳错乱?这并非你的操作失误,而是MP3格式本…...

3个步骤,让猫抓帮你轻松捕获网页视频资源

3个步骤,让猫抓帮你轻松捕获网页视频资源 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经遇到过这样的情况?在网…...

Mac用户福音:Qwen3-TTS声音克隆在ComfyUI上的M芯片优化方案

Mac用户福音:Qwen3-TTS声音克隆在ComfyUI上的M芯片优化方案 1. 为什么Mac用户需要特别优化方案 苹果M系列芯片凭借其出色的能效比和统一内存架构,已经成为许多创意工作者的首选。然而,在运行AI模型时,特别是像Qwen3-TTS这样的语…...

Git从入门到精通:完整学习路线图,全面详细一次过

Git超详细使用教程:从入门到高级(全面详解|目录结构|口语化专业双轨|长文警告) ⚠️ 长文警告:全文共 6218 字,覆盖 Git 全生命周期操作,含 18 个核心章节、7 张结构化对…...

别再手动转格式了!用Python的docx2pdf库5行代码搞定Word转PDF(Windows/Mac通用教程)

5行代码终结格式转换焦虑:Python自动化Word转PDF全攻略 每次市场部门催着要电子合同时,你是不是还在手忙脚乱地点击"另存为PDF"?当运营团队需要批量生成上百份产品手册时,是否还在忍受重复机械的格式转换操作&#xff1…...

[特殊字符] Nano-Banana效果分享:电动工具齿轮箱高精度啮合关系可视化拆解图

Nano-Banana效果分享:电动工具齿轮箱高精度啮合关系可视化拆解图 你有没有想过,一个复杂的电动工具内部到底长什么样?那些精密的齿轮是如何咬合在一起,将电机的旋转变成强大动力的?传统的产品说明书往往只有一张模糊的…...

ADNS3080光学传感器驱动开发与聚焦校准实战

1. ADNS3080光学运动传感器底层驱动技术解析ADNS3080是Avago(现Broadcom)推出的一款高精度、低功耗CMOS光学运动传感器,专为机械鼠标、轨迹球及工业位移检测等场景设计。其核心优势在于集成化程度高——片内集成了LED驱动电路、图像采集阵列&…...

解锁Switch无限可能:TegraRcmGUI图形化注入工具实战指南

解锁Switch无限可能:TegraRcmGUI图形化注入工具实战指南 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI 当你想为Nintendo Switch安装自定义系统…...

万象视界灵坛基础教程:PyTorch+Transformers环境搭建与CLIP零样本推理入门

万象视界灵坛基础教程:PyTorchTransformers环境搭建与CLIP零样本推理入门 1. 环境准备与快速部署 1.1 系统要求 Python 3.8或更高版本支持CUDA的NVIDIA GPU(推荐)至少8GB显存(CLIP-ViT-L/14模型需求)10GB以上可用磁…...