2021-04-24

**

OpenCV——脸部打码


一、图像脸部打码的原理
在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区域(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原理,定义出人的面部,在在其定义的地方进行操作。

上一篇:数字图像处理 中值滤波 MATLAB实验


下一篇:图像的加密与解密