目录

  • 1 OpenCV入门
    • 1.1 如何使用
    • 1.2 图像读入、显示与保存
  • 2 图像处理基础
    • 2.1 图像处理入门基础
    • 2.2 像素处理
    • 2.3 numpy访问像素
    • 2.4 获取图像属性
    • 2.5 感兴趣区域ROI
    • 2.6 通道操作
  • 3 图像运算
    • 3.1 图像加法
    • 3.2 图像融合
    • 3.3 位平面分解
    • 3.4 图像加密和解密
    • 3.5 数字水印
  • 4 色彩空间类型转换
    • 4.1 色彩类型转换
  • 5 几何变换
    • 5.1 图像缩放
    • 5.2 图像翻转
  • 6 阈值处理
    • 6.1 阈值理论知识
    • 6.2 阈值处理实践
  • 7 图像平滑处理
    • 7.1 均值滤波
    • 7.2 方框滤波
    • 7.3 高斯滤波
    • 7.4 中值滤波
  • 8 形态学操作
    • 8.1 图像腐蚀
    • 8.2 图像膨胀
    • 8.3 开运算
    • 8.4 闭运算
    • 8.5 梯度运算
    • 8.6 礼帽操作
    • 8.7 黑帽图像处理
  • 9 图像梯度
    • 9.1 Sobel理论基础
    • 9.2 Sobel算子及函数使用
    • 9.3 Scharr算子及函数使用
    • 9.4 Sobel算子和Scharr算子的比较
    • 9.5 Laplacian算子及函数使用
  • 10 canny边缘检测
    • 10.1 Canny边缘检测原理
    • 10.2 Canny函数及使用
  • 11 图像金字塔
    • 11.1 理论基础
    • 11.2 pyrDown函数及使用
    • 11.3 pyrUp函数及使用
    • 11.4 采样可逆性的研究
    • 11.5 拉普拉斯金字塔
  • 12 图像轮廓
    • 12.1 图像轮廓操作
  • 13 直方图
    • 13.1 直方图的概念
    • 13.2 绘制直方图
    • 13.3 使用OpenCV统计直方图
    • 13.4 绘制OpenCV统计直方图
    • 13.5 使用掩膜的直方图
    • 13.6 掩膜原理及演示
    • 13.7 直方图均衡化原理
    • 13.8 直方图均衡化函数equalizeHist
    • 13.9 subplot函数的使用
    • 13.10 matplotlib.pyplot.imshow函数的使用
    • 13.11 直方图均衡化对比
  • 14 傅里叶变换
    • 14.1 傅里叶变换的理论基础
    • 14.2 numpy实现傅里叶变换
    • 14.3 numpy实现逆傅里叶变换
    • 14.4 高通滤波演示
    • 14.5 OpenCV实现傅里叶变换
    • 14.6 OpenCV实现逆傅里叶变换
    • 14.7 低通滤波示例
图像加密和解密

3.7图像的加密和解密

通过按位异或运算可以实现图像的加密和解密

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

加密过程:

原始图像O                                       加密密钥图像K

                                                                 

 

202

 
 

120

 
 

30

 
 

156

 

 

15

 
 

212

 
 

223

 
 

71

 
 

249

 
 

25

 
 

23

 
 

190

 
 

183

 
 

6

 
 

30

 
 

235

 
 

238

 
 

1

 
 

198

 
 

150

 
 

218

 
 

18

 
 

157

 
 

172

 
 

6

 
 

21

 
 

65

 
 

24

 
 

4

 
 

178

 
 

95

 
 

154

 

 

原始图像所对应的二进制OB                       加密图像所对应的二进制KB

                                                                 

 

11001010

 
 

01111000

 
 

00011110

 
 

10011100

 
 

异或

 
 

00001111

 
 

11010100

 
 

11011111

 
 

01000111

 
 

11111001

 
 

00011001

 
 

00010111

 
 

10111110

 
 

10110111

 
 

00000110

 
 

00011110

 
 

11101011

 
 

11101110

 
 

00000001

 
 

11000110

 
 

10010110

 
 

11011010

 
 

00010010

 
 

10011101

 
 

10101100

 
 

00000110

 
 

00010101

 
 

01000001

 
 

00011000

 
 

00000100

 
 

10110010

 
 

01011111

 
 

10011010

 

 

OBKB按位异或得到的图像OSB

                               

 

1100  0101

 
 

1010  1100

 
 

1100  0001

 
 

1101  1011

 
 

0100  1110

 
 

0001  1111

 
 

0000  1001

 
 

0101  0101

 
 

0011  0100

 
 

0001  0011

 
 

0101  1011

 
 

0011  1010

 
 

0000  0010

 
 

1010  0111

 
 

0001  1110

 
 

1000  0010

 

 

OSB转换成十进制OS

                               

 

197

 
 

172

 
 

193

 
 

219

 
 

78

 
 

31

 
 

9

 
 

85

 
 

52

 
 

19

 
 

91

 
 

58

 
 

2

 
 

167

 
 

30

 
 

130

 

 

解密过程:

解密过程需要将加密图像OSB与密钥图像KB进行按位异或运算,即得到原始图像OR的二进制形式ORB

                                                                   

 

OSB

 
 

1100  0101

 
 

1010  1100

 
 

1100  0001

 
 

1101  1011

 
 

0100  1110

 
 

0001  1111

 
 

0000  1001

 
 

0101  0101

 
 

0011  0100

 
 

0001  0011

 
 

0101  1011

 
 

0011  1010

 
 

0000  0010

 
 

1010  0111

 
 

0001  1110

 
 

1000  0010

 
 

KB

 
 

00001111

 
 

11010100

 
 

11011111

 
 

01000111

 
 

10110111

 
 

00000110

 
 

00011110

 
 

11101011

 
 

11011010

 
 

00010010

 
 

10011101

 
 

10101100

 
 

00000100

 
 

10110010

 
 

01011111

 
 

10011010

 

 

                                                                   

 

ORB

 
 

11001010

 
 

01111000

 
 

00011110

 
 

10011100

 
 

11111001

 
 

00011001

 
 

00010111

 
 

10111110

 
 

11101110

 
 

00000001

 
 

11000110

 
 

10010110

 
 

00000110

 
 

00010101

 
 

01000001

 
 

00011000

 
 

OR

 
 

202

 
 

120

 
 

30

 
 

156

 
 

249

 
 

25

 
 

23

 
 

190

 
 

238

 
 

1

 
 

198

 
 

150

 
 

6

 
 

21

 
 

65

 
 

24

 

 

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