win10+Python3.7.3+OpenCV3.4.1入门学习(三)————3.7脸部打码及解码

Python版本是Python3.7.3,OpenCV版本OpenCV.3.4.1,开发环境为PyCharm

本节介绍一个使用掩模和按位运算方式实现的对脸部打码、解码实例。
eg:编写程序,使用掩码对lena图像的脸部进行打码、解码。
代码如下:

import cv2
import numpy as np
#读取原始载体图像
lena=cv2.imread("lena.bmp",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。
● 图(l)是最终的脸部解码结果图像extractLena,该图像是通过对提取的脸部图像extractFace(图(j))和不包含脸部信息的图像noFace2(图(k))进行按位或运算得到的。

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值