第四章-图像加密与解密

这篇具有很好参考价值的文章主要介绍了第四章-图像加密与解密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

加密与加密原理

使用异或运算实现图像加密及解密功能。

异或运算规则(相同为0,不同为1)

  • 运算数相同,结果为0;运算数不同,结果为1
  • 任何数(0/1)与0异或,结果仍为自身
  • 任何数(0/1)与1异或,结果为另外一个数,即0变1, 1变0
  • 任何数和自身异或,结果为0

同理到图像加密解密

  • 加密过程:明文a与密钥b进行异或运算得到密文c
  • 解密过程:密文c与密钥b进行异或运算得到明文a

跑个代码

import cv2 as cv
import numpy as np

lena = cv.imread("lena.jpg")
row, colm,count = lena.shape
print(row)
print(colm)
key = np.random.randint(0, 256, size=[row, colm,count], dtype=np.uint8)
encryption = cv.bitwise_xor(lena, key)
decryption = cv.bitwise_xor(encryption, key)
cv.imshow("lena", lena)
cv.imshow("key", key)
cv.imshow("encryption",encryption)
cv.imshow("decryption",decryption)

cv.waitKey()
cv.destroyAllWindows()

运行如下:

第四章-图像加密与解密

脸部加密及解密

脸部加密及解密其实就是图像部分区域的加解密的过程。

人脸打码的功能更像是掩模+np异或运算的结合,脸部打码有2种方式,一种是通过掩模方式实现,另一种是通过ROI方式实现。

掩模方式

加密过程:

第四章-图像加密与解密

解密过程:

第四章-图像加密与解密

具体代码实现如下:

import cv2 as cv
import numpy as np

# 读取原始图
lena = cv.imread("lena.png", 0)
cv.imshow("lena", lena)
r, c = lena.shape
# 得到掩码模板
mask = np.zeros((r, c), dtype=np.uint8)
mask[220:400, 250:350] = 1

# 得到加密解密的密钥图像
key = np.random.randint(0, 256, size=[r, c], dtype=np.uint8)

# ========================获取加密的脸===================
# step1 使用密钥key对原始图片lena进行加密
lenaXorKey = cv.bitwise_xor(lena, key)

# step2 获取已经加密的脸部位置信息(整个加密图像与mask做与运算)
encryptFace = cv.bitwise_and(lenaXorKey, mask * 255)

# step3 另外再对lena图像进行处理 通过使用 反mask,得到没有人脸信息的lena图像
noFace = cv.bitwise_and(lena, (1 - mask) * 255)

# step4 把获取的已经加密的只有人脸的图像加到被扣掉人脸信息的lena图像上,得到人脸加密的lena图像
maskFace = encryptFace + noFace

cv.imshow("maskFace", maskFace)
# ========================开始人脸解密===================
# step5 将脸部加密的lena与密钥key进行异或,这样人脸区域会解密,其他区域会被加密(不重要)
extractOriginal = cv.bitwise_xor(maskFace, key)

# step6 提取解密后的人脸,其他区域是0
extractFace = cv.bitwise_and(extractOriginal, mask * 255)

# step7 从打码的lena图像中提取没有人脸信息的lena图像(人脸区域为0)
noface2 = cv.bitwise_and(maskFace, (1 - mask) * 255)
cv.imshow("nofaceee", noface2)
# step8 在扣掉人脸的lena图像中加入已经解密后的人脸

extractLena = noface2 + extractFace
cv.imshow("extractLena", extractLena)

cv.waitKey()
cv.destroyAllWindows()

程序运行如下:

第四章-图像加密与解密

ROI方式

ROI方式更多的是对人脸区域进行处理。

人脸加密过程如下:

第四章-图像加密与解密

人脸解密过程如下:

第四章-图像加密与解密

ROI方式给脸部加密解密的过程感觉就是个作弊的过程。

代码如下:

import cv2 as cv
import numpy as np

# 读取原始图
lena = cv.imread("lena.png", 0)
cv.imshow("lena", lena)
r, c = lena.shape
# 得到掩码模板
mask = np.zeros((r, c), dtype=np.uint8)
mask[220:400, 250:350] = 1

# 得到加密解密的密钥图像
key = np.random.randint(0, 256, size=[r, c], dtype=np.uint8)

# ========================获取加密的脸===================
# step1 使用密钥key对原始图片lena进行加密
lenaXorKey = cv.bitwise_xor(lena, key)

# step2 得到加密的人脸区域
secretFace = lenaXorKey[220:400, 250:350]

# step3 把加密的人脸区域贴到lena原始图上
lena[220:400, 250:350] = secretFace
cv.imshow("lena_secretface", lena)
# ========================开始人脸解密===================
# step4 将脸部加密的lena与密钥key进行异或,这样人脸区域会解密,其他区域会被加密(不重要)
extractOriginal = cv.bitwise_xor(lena, key)

# step5 扣下已经解密的人脸图像
face = extractOriginal[220:400, 250:350]

# step6 把扣下的人脸贴到加密的lena上,这样,解密后的脸就把加密的人的区域覆盖了
lena[220:400, 250:350] = face

cv.imshow("enFace", lena)

cv.waitKey()
cv.destroyAllWindows()

程序运行如下:

第四章-图像加密与解密

总结:图像的加解密更像是异或运算和掩模,ROI的综合使用,整体难度不大。文章来源地址https://www.toymoban.com/news/detail-419252.html

到了这里,关于第四章-图像加密与解密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像处理与计算机视觉--第四章-图像滤波与增强-第一部分

    目录 1.灰度图亮度调整 2.图像模板匹配 3.图像裁剪处理 4.图像旋转处理 5.图像邻域与数据块处理

    2024年02月07日
    浏览(61)
  • 编译原理陈火旺版第四章课后题答案

    目前修改了第三题的部分问题。 1.考虑下面文法G1: S→a∣∧∣(T) T→T,S∣S (1) 消去 Q 的左递归。然后,对每个非终结符,写岀不带回溯的递归子程序。 (2) 经改写后的文法是否是LL(1)的?给出它的预测分析表。 2.对下面的文法G: P→(E)lalblΛ (1)计算这个文法的每个非终结符的F

    2024年02月03日
    浏览(40)
  • (数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换

    一维离散傅里叶变换(Discrete Fourier Transform,DFT) :是一种数学技术,用于将代表离散时间信号的N个复数序列从 时域转换到频域 。DFT被广泛用于许多应用,如音频和图像处理、通信和控制系统。DFT是傅里叶变换的离散版本,傅里叶变换是一种用于分析频域信号的连续数学技

    2023年04月13日
    浏览(88)
  • ElasticSearch学习笔记-第四章 ES分片原理以及读写流程详解

    在学习ES分片原理以及读写流程之前,需要先学习一些ES的核心概念以及ES集群环境的相关知识 4.1 ES核心概念 4.1.1 索引 索引(Index)相当于MySQL中的数据库,一个索引就是一个拥有几分相似特征的文档的集合。 4.1.2 类型 类型(Type)相当于MySQL中的表,一个类型就是索引的一个逻辑上

    2024年02月06日
    浏览(59)
  • 计算机网络原理 谢希仁(第8版)第四章习题答案

    4-01 网络层向上提供的服务有哪两种?试比较其优缺点。 面向连接的和无连接。 面向连接优点: 通过虚电路发送分组,分组只用填写虚电路编号,分组开销较小; 分组按序达到终点。 面向连接缺点: 一个节点出故障,所有通过该节点的虚电路均不能工作; 可靠通信交给网

    2024年02月03日
    浏览(45)
  • 【计算机组成原理】24王道考研笔记——第四章 指令系统

    指令是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该 机的指令系统,也称为指令集。 指令格式: 1.1分类 按地址码数目分类: 按指令长度分类: 按操作码长度分类: 按操作类型分类: 1.2 扩展操作码 设地址长度为n,

    2024年02月13日
    浏览(48)
  • 传感器原理与检测技术复习笔记第四章-电感式传感器

    基本原理 由 线圈、铁芯、衔铁 三部分组成,在铁芯和衔铁之间有气隙,传感器的运动部分和衔铁相连。 衔铁移动时,气隙厚度发生变化,引起磁路的磁阻变化,从而导致线圈电感发生变化。 通过测量电感量的变化确定位移的大小和方向。 通常气隙磁阻远大于铁芯和衔铁的

    2024年02月13日
    浏览(37)
  • 【云原生进阶之PaaS中间件】第四章RabbitMQ-4.1-原理机制与进阶特性

    1.客户端连接到消息队列服务器,打开一个Channel。 2.客户端声明一个Exchange,并设置相关属性。 3.客户端声明一个Queue,并设置相关属性。 4.客户端使用Routing key,在Exchange和Queue之间建立好绑定关系。 5.客户端投递消息到Exchange。 6.Exchange接收到消息后,就根据消息的key和已经

    2024年02月21日
    浏览(49)
  • python笔记:第四章使用字典

    说白了就是键值对的映射关系 不会丢失数据本身关联的结构,但不关注数据的顺序 是一种可变类型 键的类型:字典的键可以是任何不可变的类型,如浮点数,字符串,元组 可以从其他映射或键值对创建字典 将字符串格式设置功能用于字典 使用format_map将两者结合起来 就地

    2024年02月13日
    浏览(63)
  • 第四章 linux编辑器——vim的使用

    v i m vim v im 是一个多模式代码编辑器。vim常用的模式有三类:命令模式(command mode)、插入模式(insert mode)和底行模式(last line mode)。这三种模式的主要功能如下: 命令模式:该模式又叫做正常模式、普通模式等。其主要的作用是控制屏幕光标的移动,控制代码的删除、

    2024年02月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包