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。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小海聊智造

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值