opencv_day03

#编写程序,实现数字水印的提取和嵌入过程
#嵌入过程:初始化-->载体图像预处理-->建立提取矩阵-->载体图像最低有效位置为0
#-->水印图像处理-->嵌入水印-->显示原始图像,水印,含水印图像
#提取过程:初始化-->含水印图像处理-->建立提取矩阵-->提取水印信息-->计算删除水印后的载体图像
#-->显示图像
import cv2
import numpy as np
#读取原始载体图像
iu=cv2.imread('./image/iu.jpeg',0)
print(iu.shape)
#读取水印图像
watermark=cv2.imread('./image/wm1.jpeg',0)
print(watermark)
print(watermark.shape)
#将水印图像内的值255处理为1,以方便嵌入
#后续章节会介绍threshold处理
w=watermark[:,:]>0
watermark[w]=1
#读取原始载体图像的shape值
r,c=iu.shape
#==============嵌入过程================
#生成元素值都是254的数组
t254=np.ones((r,c),dtype=np.uint8)*254
#获取iu图像的高7位
iuH7=cv2.bitwise_and(iu,t254)
#将watermark嵌入iuH7图像内
e=cv2.bitwise_or(iuH7,watermark)
#==============提取过程================
#生成元素值都是1的数组
t1=np.ones((r,c),dtype=np.uint8)
#从载体图像内提取水印图像
wm=cv2.bitwise_and(e,t1)
print(wm)
#将水印图像内的值1处理为255,以方便显示
#后续章节会介绍使用threshold实现
w=wm[:,:]>0
wm[w]=255
#===============显示==================
cv2.imshow('iu',iu)
cv2.imshow('watermark',watermark*255)
cv2.imshow('e',e)
cv2.imshow('wm',wm)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
在这里插入图片描述

#编写程序使用掩膜对iu图像的脸部进行打码和解码
import cv2
import numpy as np
#读取原始载体图像
iu=cv2.imread('./image/iu.jpeg',0)
#读取原始载体图像的shape值
r,c=iu.shape
mask=np.zeros((r,c),dtype=np.uint8)
mask[220:400,150:350]=1
#获取一个key,打码,解码时所需要的密钥
key=np.random.randint(0,256,size=[r,c],dtype=np.uint8)
#=================获取打码脸==================
#使用密钥key对原始图像iu进行加密
iuXORkey=cv2.bitwise_xor(iu,key)
#获取加密图像的脸部信息encryptFace
encryptFace=cv2.bitwise_and(iuXORkey,mask*255)
#将图像iu的脸部值设为0,得到noFace1
noFace1=cv2.bitwise_and(iu,(1-mask)*255)
#得到打码的iu图像
maskFace=encryptFace+noFace1
#================将打码脸解码================
#将脸部打码的iu与密钥key进行异或运算,得到脸部的原始信息
extractOriginal=cv2.bitwise_xor(maskFace,key)
#将解码的脸部信息extractOriginal提取出来,得到脸部的原始信息
extractFace=cv2.bitwise_and(extractOriginal,mask*255)
#从脸部打码的iu内提取没有脸部信息的iu图像,得到noFace2
noFace2=cv2.bitwise_and(maskFace,(1-mask)*255)
#得到解码的iu图像
extractIu=noFace2+extractFace
#=================显示图像==================
cv2.imshow('iu',iu)
cv2.imshow('mask',mask*255)
cv2.imshow('1-mask',(1-mask)*255)
cv2.imshow('key',key)
cv2.imshow('iuXorKey',iuXORkey)
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('extractIu',extractIu)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

色彩空间类型转换
每个色彩空间都有自己擅长处理问题的领域
1)GRAY色彩空间(8位灰度图)
RGB to GRAY:      Gray=0.229R+0.587G+0.114*B(标准)
                   Gray=(R+G+B)/3(简化)
Gray to RGB: R=Gray;G=Gray;B=Gray
2)XYZ色彩空间
是由CIE定义的,更便于计算
RGB to XYZ:
[x     [0.412453 0.357580 0.180423   [R
y   =   0.212671  0.715160 0.072169 *  G
z]      0.019334 0.119193 0.950227]   B]
 
 在这里插入图片描述
3)YCrCb色彩空间

在YCrCb色彩空间中,Y代表光源的亮度,色度信息包含在Cr和Cb中,其中,Cr表示红色分量信息,Cb表示蓝色分量信息
公式过多不再展示,自行查阅<<opencv轻松入门:面向Python>>—李立宗著一书77页开始到82页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值