机器视觉与深度学习(OpenCV-Python)案例代码1:按位异或运算与图像加密、解密
·
案例内容:
编写程序,通过按位异或运算,实现图像加密与解密。
案例原理:
对于数据a、数据b进行异或运算,得到数据c。即:
a xor b = c
此时有:
c xor a = (a xor b) xor a = b xor (a xor a) = b
c xor b = (a xor b) xor b = a xor (b xor b) = a
对应到图像上,对于原始图像a,密钥图像b进行按位异或运算,得到加密图像c,若加密图像c与密钥图像b进行按位异或运算,会得到原始图像a。反之,若加密图像c与原始图像a进行按位异或运算,会得到密钥图像b。
重点代码:
result = cv2.bitwise_xor(origin, key)
输出图像result,表示图像origin与图像key进行按位异或运算的结果。
代码实现:
在代码最开始,需要导入cv2库与numpy库,随后读取原始图像,获取原始图像的相关信息。即:
import numpy as np
import cv2
img = cv2.imread("lena.jpg", 0)
r, c = img.shape
在具体实现过程中,双方可以协商预先确定一副密钥图像K。本例使用随机数生成了一副图像作为密钥,即:
key = np.random.randint(0,256,size=[r, c], dtype=np.uint8)
获得密钥图像后,将原始图像与密钥图像进行按位异或运算,得到加密图像,即:
result = cv2.bitwise_xor(img, key)
将加密图像与密钥图像进行按位异或运算,得到原始图像,即:
img1 = cv2.bitwise_xor(result, key)
最后进行结果展示:
cv2.imshow("img", img)
cv2.imshow("key", key)
cv2.imshow("result", result)
cv2.imshow("img1", img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
最终代码为:
#======导入库======
import numpy as np
import cv2
#======读取原始图像======
img = cv2.imread("lena.jpg",0)
r,c=img.shape
#======图像加密与解密======
key=np.random.randint(0,256,size=[r,c],dtype=np.uint8) #生成密钥图像
result = cv2.bitwise_xor(img, key) #进行图像加密
img1 = cv2.bitwise_xor(result, key) #进行图像解密
#======结果展示======
cv2.imshow("key",key)
cv2.imshow("result",result)
cv2.imshow("img1",img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果为:

更多推荐


所有评论(0)