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

opencv-17 脸部打码及解码

使用掩模和按位运算方式实现的对脸部打码、解码实例

代码如下:

import cv2
import numpy as np
#读取原始载体图像
lena=cv2.imread("lena.png",0)
#读取原始载体图像的 shape 值
r,c=lena.shape
mask=np.zeros((r,c),dtype=np.uint8)
mask[220:400,250:350]=1
#获取一个 key,打码、解码所使用的密钥
key=np.random.randint(0,256,size=[r,c],dtype=np.uint8)
#============获取打码脸============
#使用密钥 key 对原始图像 lena 加密
lenaXorKey=cv2.bitwise_xor(lena,key)
#获取加密图像的脸部信息 encryptFace
encryptFace=cv2.bitwise_and(lenaXorKey,mask*255)
#将图像 lena 内的脸部值设置为 0,得到 noFace1
noFace1=cv2.bitwise_and(lena,(1-mask)*255)
#得到打码的 lena 图像
maskFace=encryptFace+noFace1
#============将打码脸解码============
#将脸部打码的 lena 与密钥 key 进行异或运算,得到脸部的原始信息
extractOriginal=cv2.bitwise_xor(maskFace,key)
#将解码的脸部信息 extractOriginal 提取出来,得到 extractFace
extractFace=cv2.bitwise_and(extractOriginal,mask*255)
#从脸部打码的 lena 内提取没有脸部信息的 lena 图像,得到 noFace2
noFace2=cv2.bitwise_and(maskFace,(1-mask)*255)
#得到解码的 lena 图像
extractLena=noFace2+extractFace
#============显示图像============
cv2.imshow("lena",lena)
cv2.imshow("mask",mask*255)
cv2.imshow("1-mask",(1-mask)*255)
cv2.imshow("key",key)
cv2.imshow("lenaXorKey",lenaXorKey)
cv2.imshow("encryptFace",encryptFace)
cv2.imshow("noFace1",noFace1)
cv2.imshow("maskFace",maskFace)
cv2.imshow("extractOriginal",extractOriginal)
cv2.imshow("extractFace",extractFace)
cv2.imshow("noFace2",noFace2)
cv2.imshow("extractLena",extractLena)
cv2.waitKey()
cv2.destroyAllWindows()

运行效果:

在这里插入图片描述

运行上述程序,会出现如图 所示的图像,其中:
 图(a)是原始图像 lena,本程序要对其脸部进行打码。
 图(b)是模板图像 mask,其中白色区域的像素值为 1,黑色区域的像素值为 0。为了方便
显示,在使用函数 cv2.imshow()显示该图像时,将其中的值 1 调整为 255。
 图©是模板图像 mask(图(b))的反色图。
 图(d)是密钥图像 key,该图像使用随机数生成。
 图(e)是整体打码图像 lenaXorKey,是将图像 lena(图(a))和密钥图像 key(图(d))进
行异或运算得到的。
 图(f)是从整体打码图像(图(e))内提取的脸部打码图像 encryptFace。
 图(g)是从图像 lena(图(a))内提取的不包含脸部信息的图像 noFace1,在提取过程中,
将模板图像 mask 的反色图(图©)作为模板。
 图(h)是对图像 lena 的脸部进行打码的结果图像 maskFace,该图像是通过对脸部打码图
像 encryptFace(图(f))和不包含脸部信息的图像 noFace1(图(g))进行按位或运算
得到的。
 图(i)是提取的初步原始图像 extractOriginal,该图像是通过对打码脸部图像 maskFace(图
(h))和密钥图像 key(图(d))进行异或运算得到的。
 图(j)是从提取的初步原始图像 extractOriginal(图(i))中提取的脸部图像 extractFace。
 图(k)从脸部打码的结果图像 maskFace(图(h))内提取的不包含脸部信息的图像 noFace2。

相关文章:

opencv-17 脸部打码及解码

使用掩模和按位运算方式实现的对脸部打码、解码实例 代码如下: import cv2 import numpy as np #读取原始载体图像 lenacv2.imread("lena.png",0) #读取原始载体图像的 shape 值 r,clena.shape masknp.zeros((r,c),dtypenp.uint8) mask[220:400,250:350…...

JVM分享

JVM分享 官网:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html Java代码的执行流程 我们编写完之后的java文件如果要运行,java文件会编译成class文件,在jvm中运行时ClassLoader会加载class文件,加载进来之后&a…...

Apache Dubbo CVE-2021-36162 挖掘过程

01 漏洞背景 发现该漏洞的起因是在分析 CVE-2021-30181 的脚本注入补丁的时候,意外发现了几个已被修复的 yaml 反序列化漏洞,还以为是未公开的Nday,查询后发现其实对应的是 CVE-2021-30180 漏洞的修复代码。通过查看补丁可以知道&#xff0c…...

开源框架面试题目整理

目录 SpringIOC SpringAOP Spring的生命周期 Spring Bean作用域 Spring Bean作用域并发安全 Spring循环依赖...

Mr. Cappuccino的第52杯咖啡——Mybatis环境搭建与使用

Mybatis环境搭建与使用 Mybatis介绍Mybatis环境搭建与使用基于XML方式-原生方式开发创建数据库表项目准备项目结构项目代码实体类中添加有参构造方法产生的问题 基于XML方式-mapper代理开发项目准备项目结构项目代码SQL映射文件中namespace未设置为接口全限定名产生的问题 基于…...

了解Unity编辑器之组件篇Tilemap(五)

Tilemap:用于创建和编辑2D网格地图的工具。Tilemap的主要作用是简化2D游戏中地图的创建、编辑和渲染过程。以下是一些Tilemap的主要用途: 2D地图绘制:Tilemap提供了一个可视化的编辑器界面,可以快速绘制2D地图,例如迷…...

Linux字符设备操作函数

Linux字符设备操作函数是指对字符设备进行打开、关闭、读取、写入、控制等基本操作的函数,它们通过字符设备结构体中的 file_operations 结构体来定义。常用的字符设备操作函数包括: 1、open: 当一个进程试图打开设备文件时,调用这个函数。开…...

吉林大学计算机软件考研经验贴

文章目录 简介政治英语数学专业课 简介 本人23考研,一战上岸吉林大学软件工程专硕,政治72分,英一71分,数二144分,专业课967综合146分,总分433分,上图: 如果学弟学妹需要专业课资料…...

2023-07-26力扣每日一题-区间翻转线段树

链接: 2569. 更新数组后处理求和查询 题意: 给两个等长数组nums1和nums2,三个操作: 操作1:将nums1的[l,r]翻转(0变1,1变0) 操作2:将nums2[any]变成nums2[any]nums1[any]*p&…...

Java设计模式之 -- 桥接模式

什么是桥接模式 桥接模式是一种结构型设计模式,也被称为“Handle/Body”。这种设计模式主要用于将抽象部分与它的实现部分分离,使它们可以独立地变化。这种方式有助于减少系统中的耦合性,增加了扩展性。 主要解决什么问题 桥接模式主要解决…...

【node.js】02-path模块

目录 1. path.join() 2. path.basename() 3. path.extname() 1. path.join() 使用 path.join() 方法,可以把多个路径片段拼接为完整的路径字符串,语法格式如下: path.join([...paths]) 例子: const path require(path)co…...

攻防世界-Reverse-re1

题目描述:菜鸡开始学习逆向工程,首先是最简单的题目 下载附件,执行程序,如下界面 1. 思路分析 没啥说的,既然题目都说是一道简单的逆向题,那么直接使用ida逆向即可,看逆向出的结果是否能写入到…...

AES加密的基本常识和封装类

AES加密的基本常识和封装类 AES(Advanced Encryption Standard)是一种对称密钥加密算法,被广泛用于保护敏感数据的安全性。它是一种块加密算法,意味着它将明文数据分成固定大小的块,并使用相同的密钥对每个块进行独立…...

elasticsearch使用记录

参考文章:https://elasticsearch-py.readthedocs.io/en/v8.8.2/ 参考文章:https://cuiqingcai.com/6214.html 参考文章:https://www.cnblogs.com/cupleo/p/13953890.html elasticsearch版本:8.8.2(软件包发行版) python版本&#…...

UNI-APP_横屏切换竖屏出现样式混乱问题

app从竖屏页面1进入竖屏页面2,再进入横屏,再返回,再返回从新回到竖屏页面1,再次进入竖屏页面2,发现竖屏页面2的所有图片字体都被放大了。再返回竖屏1,再进入竖屏2,一切又恢复正常。 解决跳转横…...

数据可视化(3)

1.饼状图 #饼状图 #pie(x,labels,colors,labeldistance,autopct,startangle,radius,center,textprops) #x,每一块饼状图的比例 #labels:每一块饼形图外侧显示的文字说明 #labeldistance:标记的绘制位置,相对于半径的比例&#xf…...

AI面试官:MD5、DES、RSA、AES加密

AI面试官:MD5、DES、RSA、AES加密 文章目录 AI面试官:MD5、DES、RSA、AES加密1. 什么是MD5加密?它在实际应用中有哪些场景?2. DES加密是什么?它在现实中的应用场景有哪些?3. 问题:RSA加密是什么…...

Shell脚本学习-$$特殊变量

$$特殊变量: 获取脚本执行的进程号(PID)。 [rootvm1 scripts]# cat test_pid.sh echo $$ > /tmp/a.pid sleep 300代码说明: 1)获取$$值,也就是当前脚本进程的PID值,重定向到/tmp/a.pid文件…...

vscode中python插件过新导致无法正常debug问题解决安装vscode以前版本python插件教程

您需要从.vsix文件安装它。您可以在此处找到它们。 下载所需.vsix版本的文件。您可能需要单击assets才能看到它们。 然后打开 VSCode,转到extensions-> 单击三个点 ->install from vsix并选择您的文件。 重启以后,就可以正常debug了!...

chrome macos编译

下载工具包 git clone https://chromium.googlesource.com/chromium/tools/depot_tools/gitpwd export PATH"$PATH:/Users/lichengjun/Downloads/chrome_build/depot_tools" mkdir chromium cd chromium 如果想快的话直接: fetch --nohooks --no-history chromium (…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

零基础设计模式——行为型模式 - 责任链模式

第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

【生成模型】视频生成论文调研

工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...