**
一、图像脸部打码的原理
在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区域(Region of Interest,ROI)。在设定感兴趣区域ROI后,就可以对该区域进行整体操作。脸部打码也是运用这一原理,例如,将一个感兴趣区域A赋值给变量B后,可以将该变量B赋值给另外一个区域C,从而达到在区域C内复制区域A的目的。
二、脸部打码及解码
代码如下:
import cv2 import numpy as np lena=cv2.imread("lena.bmp",0) h,w=lena.shape mask=np.zeros((h,w),dtype=np.uint8) mask[220:400,250:350]=1 key=np.random.randint(0,256,size=[h,w],dtype=np.uint8) # 获取密匙 lenaXorKey=cv2.bitwise_xor(lena,key) # 对原图像加密 encryptFace=cv2.bitwise_and(lenaXorKey,mask*255) # 获取加密图的脸部信息 noFace1=cv2.bitwise_and(lena,(1-mask)*255) # 将原图的脸部位置置0 maskFace=encryptFace+noFace1 # 得到打码的原图 # 解码 extractOriginal=cv2.bitwise_xor(maskFace,key) # 得到脸部的原始信息 extractFace=cv2.bitwise_and(extractOriginal,mask*255) # 提取脸部信息 noFace2=cv2.bitwise_and(maskFace,(1-mask)*255) # 从打码的原图内提取没有脸的原图 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()
脸部打码主要运用了ROI原理,定义出人的面部,在在其定义的地方进行操作。