2024蓝桥杯网络安全-图片隐写-缺失的数据（0基础也能学会-含代码解释）

pavilion就是密码，解压压缩包，可以得到一张图片-a.png

import cv2
import numpy as np
import pywt
'''

'''
​
class WaterMarkDWT:
def __init__(self, origin: str, watermark: str, key: int, weight: list):
self.key = key
self.coef = weight
​

'''
该函数名为arnold，接受一个参数img，返回一个经过Arnold变换后的图像。

x = (i + b * j) % r
y = (a * i + (a * b + 1) * j) % c

'''
def arnold(self, img):
r, c = img.shape
p = np.zeros((r, c), np.uint8)
​
a, b = 1, 1
for k in range(self.key):
for i in range(r):
for j in range(c):
x = (i + b * j) % r
y = (a * i + (a * b + 1) * j) % c
p[x, y] = img[i, j]
return p
​
'''
该函数用于对输入的图像进行Arnold变换。Arnold变换是一种对图像进行扭曲变形的算法。函数通过遍历输入图像的每个像素，并根据一定的计算公式计算出变换后的像素位置，并将对应像素值保存在结果图像中。返回变换后的图像。其中，self.key表示变换次数。
'''
def deArnold(self, img):
r, c = img.shape
p = np.zeros((r, c), np.uint8)
​
a, b = 1, 1
for k in range(self.key):
for i in range(r):
for j in range(c):
x = ((a * b + 1) * i - b * j) % r
y = (-a * i + j) % c
p[x, y] = img[i, j]
return p
​

'''
该函数是一个图像处理函数，主要实现了以下功能：

Arnold变换：对重构后的图像进行Arnold变换，增加图像的随机性。

'''

def 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.coef
​
ca1 = (cl - dl) * a1
ch1 = (cH3 - dH3) * a2
cv1 = (cV3 - dV3) * a3
cd1 = (cD3 - dD3) * a4
​
# Ensure all coefficients have the same shape
ca1 = cv2.resize(ca1, (cD3.shape[1], cD3.shape[0]))
​
waterImg = pywt.waverec2([ca1, (ch1, cv1, cd1)], 'db2')
waterImg = np.array(waterImg, np.uint8)
​
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)
​
return waterImg
​
'''

'''
if __name__ == '__main__':
img = 'a.png'
watermark = 'newImg.png'

k = 20
xs = [0.2, 0.2, 0.5, 0.4]

W1 = WaterMarkDWT(img, watermark, k, xs)
extracted_watermark = W1.get()
cv2.imwrite('提取出的水印.png', extracted_watermark)

|
1天前
|

8 0
|
1天前
|

YOLOv8改进 | 注意力机制 | 在主干网络中添加MHSA模块【原理+附完整代码】
Transformer中的多头自注意力机制（Multi-Head Self-Attention, MHSA）被用来增强模型捕捉序列数据中复杂关系的能力。该机制通过并行计算多个注意力头，使模型能关注不同位置和子空间的特征，提高了表示多样性。在YOLOv8的改进中，可以将MHSA代码添加到/ultralytics/ultralytics/nn/modules/conv.py，以增强网络的表示能力。完整实现和教程可在提供的链接中找到。
9 2
|
2天前
|

m基于PSO-GRU粒子群优化长门控循环单元网络的电力负荷数据预测算法matlab仿真

5 0
|
2天前
|

9 1
|
2天前
|

【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
10 2
|
2天前
|

【从零开始学习深度学习】27.卷积神经网络之VGG11模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】27.卷积神经网络之VGG11模型介绍及其Pytorch实现【含完整代码】
7 2
|
2天前
|

【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
10 3
|
2天前
|

【从零开始学习深度学习】25.卷积神经网络之LeNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】25.卷积神经网络之LeNet模型介绍及其Pytorch实现【含完整代码】
8 2
|
3天前
|

Python网络实践：去哪儿旅游数据爬取指南
Python网络实践：去哪儿旅游数据爬取指南
10 1
|
6天前
|

MaxCompute产品使用合集之自定义udf连接云上vpc网络的redis获取数据的步骤是什么
MaxCompute作为一款全面的大数据处理平台，广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践，可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集，涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
30 4