Opencv+Python学习记录10:位平面分解+图像加密和解密(内附详细代码)

一,前置知识

在本部分,我们将学习用 按位与运算(cv2.bitwise_and)观察灰度图像的各个位平面,以及通过 图像按位异或(cv2.bitwise_xor)实现加密和解密过程,故最好先了解图像算术运算。详情可查看本专栏的学习记录8:Opencv+Python学习记录8:图像算术运算(内附详细代码)_修修修修Hugh的博客-CSDN博客

二,位平面分解

将灰度图像中处于同一比特位上的二进制像素值进行组合,得到一幅二进制值图像,该图像被称为灰度图像的一个位平面,这个过程被称为位平面分解。下面以灰度图像为例,介绍位平面分解的具体步骤:
1.图像预处理
读取原始图像O,获取原始图像O的宽度M和高度N。
2.构造提取矩阵
使用按位与操作能够很方便地将一个数值指定位上的数字提取出来。
3.提取位平面
将灰度图像与提取矩阵进行按位与运算,得到各个位平面。
将像素值与一个值为2n的数值进行按位与运算,能够使像素值的第n位保持不变,而将其余各位均置零。因此,通过像素值与特定值的按位与运算,能够提取像素值的指定二进制位的值。同理,通过按位与运算,能够提取图像的指定位平面。
4.阈值处理
通过计算得到的位平面是一个二值图像,如果直接将上述得到的位平面显示出来,则会得到一张近似黑色的图像。这是因为默认当前显示的图像是8位灰度图,而当其中的像素值较小时,显示的图像就会是近似黑色的。例如,在图像RD中,最大的像素值是8,因此几乎为纯黑色。要想让8显示为白色,必须将8处理为255。
也就是说,每次提取位平面后,要想让二值位平面能够以黑白颜色显示出来,就要将得到的二值位平面进行阈值处理,将其中大于零的值处理为255。
5.显示图像
完成上述处理后,可以将位平面显示出来,直观地观察各个位平面的具体情况。

例:编写程序,观察灰度图像的各个位平面

编写程序,观察灰度图像的各个位平面
import cv2
import numpy as np
gray1=cv2.imread("gray1.jpg",0)
cv2.imshow("gray1",gray1)
r,c=gray1.shape
x=np.zeros((r,c,8),dtype=np.uint8)
for i in range(8):
    x[:,:,i]=2**i
r=np.zeros((r,c,8),dtype=np.uint8)
for i in range(8):
    r[:,:,i]=cv2.bitwise_and(gray1,x[:,:,i])
    mask=r[:,:,i]>0
    r[mask]=255
    cv2.imshow(str(i),r[:,:,i])
cv2.waitKey()
cv2.destroyAllWindows()

输出结果如下:

Opencv+Python学习记录10:位平面分解+图像加密和解密(内附详细代码)

三,图像加密和解密

通过按位异或运算可以实现图像的加密和解密。
通过对原始图像与密钥图像进行按位异或,可以实现加密;将加密后的图像与密钥图像再次进行按位异或,可以实现解密。

例:编写程序,通到图像按位异或实现加密和解密过程。

编写程序,通过图像按位异或实现加密和解密过程
import cv2
import numpy as np
gray1=cv2.imread("gray1.jpg",0)
r,c=gray1.shape
key=np.random.randint(0,256,size=[r,c],dtype=np.uint8)
encryption=cv2.bitwise_xor(gray1,key)
decryption=cv2.bitwise_xor(encryption,key)
cv2.imshow("gray1",gray1)
cv2.imshow("key",key)
cv2.imshow("encryption",encryption)
cv2.imshow("decryption",decryption)
cv2.waitKey()
cv2.destroyAllWindows()

输出结果如下:

Opencv+Python学习记录10:位平面分解+图像加密和解密(内附详细代码)

四,样例图片

Opencv+Python学习记录10:位平面分解+图像加密和解密(内附详细代码)

gray1.jpg

Original: https://blog.csdn.net/qq_53914247/article/details/123823464
Author: Hugh.L
Title: Opencv+Python学习记录10:位平面分解+图像加密和解密(内附详细代码)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/642050/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球