脸部打码

2022-05-28 16:07:26 浏览数 (1)

代码语言:javascript复制
import cv2
import numpy as np
lena=cv2.imread("C:/Users/xpp/Desktop/Lena.png",0)#读取原始图像
r,c=lena.shape#读取原始图像的shape值
mask=np.zeros((r,c),dtype=np.uint8)
mask[100:400,200:350]=1#打码图像的列和行
key=np.random.randint(0,256,size=[r,c],dtype=np.uint8)#获取一个key,打码、解码所使用的密钥
#步骤1:获取打码脸
lenaXorKey=cv2.bitwise_xor(lena,key)#使用密钥key对原始图像lena加密
encryptFace=cv2.bitwise_and(lenaXorKey,mask*255)#获取加密图像的脸部信息encryptFace
noFace1=cv2.bitwise_and(lena,(1-mask)*255)#将图像lena内的脸部设置为0,得到noFace1
maskFace=encryptFace noFace1#得到打码的lena图像
#步骤2:将打码脸解码
extractOriginal=cv2.bitwise_xor(maskFace,key)#将脸部打码的lena与密钥key进行异或运算,得到脸部的原始信息
extractFace=cv2.bitwise_and(extractOriginal,mask*255)#将解码的脸部信息extractOriginal提取出来,得到extractFace
noFace2=cv2.bitwise_and(maskFace,(1-mask)*255)#从脸部打码的lena内提取没有脸部的lena图像,得到noFace2
extractLena=noFace2 extractFace#得到解码的lena图像
#步骤3:显示图像
cv2.imshow("lena",lena)
cv2.imshow("noFace1",noFace1)
cv2.imshow("maskFace",maskFace)
cv2.imshow("noFace2",noFace2)
cv2.imshow("extractLena",extractLena)
cv2.waitKey()
cv2.destroyAllWindows()

算法:脸部打码原理是用一个像素点去代替需要被替代的像素点,类似于暴力抠图法。

0 人点赞