图像加密笔记python实现

1.随机打乱各行进行数字图像加密

import cv2
import numpy as np
import matplotlib.pyplot as plt
import ch
ch.set_ch()
RGB = cv2.imread(r'D:\DigitPictureProcess\hist02.PNG')
# 返回矩阵的行和列
s = RGB.shape[0]
r = np.random.choice(s, size=s, replace=False, p=None)
RGBS = RGB[r, :, :]

j = 0
f = np.arange(0, len(r))
while j <= len(r):
    # find(r==j)是返回r中等于j的值的索引,可以是多个,赋值给f的第j个位置
    for (i, val) in enumerate(r):
        if val == j:
            f[j] = i
    j = j + 1

RGBE = RGBS[f, :, :]

plt.subplot(1, 2, 1)
plt.imshow(RGBS)
plt.title(u"加密后")
plt.subplot(1, 2, 2)
plt.imshow(RGBE)
plt.title(u"解密后")
plt.show()

2. 随机打乱各列进行数字图像加密

import cv2
import numpy as np
import matplotlib.pyplot as plt
import ch
ch.set_ch()
RGB = cv2.imread(r'D:\DigitPictureProcess\hist02.PNG')
# 返回矩阵的行和列
s = RGB.shape[1]
r = np.random.choice(s, size=s, replace=False, p=None)
RGBS = RGB[:, r, :]

j = 0
f = np.arange(0, len(r))
while j <= len(r):
    # find(r==j)是返回r中等于j的值的索引,可以是多个,赋值给f的第j个位置
    for (i, val) in enumerate(r):
        if val == j:
            f[j] = i
    j = j + 1

RGBE = RGBS[:, f, :]

plt.subplot(1, 2, 1)
plt.imshow(RGBS)
plt.title(u"加密后")
plt.subplot(1, 2, 2)
plt.imshow(RGBE)
plt.title(u"解密后")
plt.show()

3.同时打乱各行各列进行数字图像加密

import cv2
import numpy as np
import matplotlib.pyplot as plt
import ch
ch.set_ch()
RGB = cv2.imread(r'D:\DigitPictureProcess\hist02.PNG')
# 返回矩阵的行和列
s_1 = RGB.shape[0]
r = np.random.choice(s_1, size=s_1, replace=False, p=None)
RGBS = RGB[r, :, :]
s_2 = RGB.shape[1]
c = np.random.choice(s_2, size=s_2, replace=False, p=None)
RGBSS = RGBS[:, c, :]
i = 0
f = np.arange(0, len(c))
while i <= len(c):
    # find(r==j)是返回r中等于j的值的索引,可以是多个,赋值给f的第j个位置
    for (k, val) in enumerate(c):
        if val == i:
            f[i] = k
    i = i + 1

j = 0
g = np.arange(0, len(r))
RGBE = RGBSS[:, f, :]
while j <= len(r):
    # find(r==j)是返回r中等于j的值的索引,可以是多个,赋值给f的第j个位置
    for (k, val) in enumerate(r):
        if val == j:
            g[j] = k
    j = j + 1

RGBEE = RGBE[g, :, :]
plt.subplot(1, 2, 1)
plt.imshow(RGBSS)
plt.title(u"加密后")
plt.subplot(1, 2, 2)
plt.imshow(RGBEE)
plt.title(u"解密后")
plt.show()

4. 随机打乱像素点进行数字图像加密

发布了33 篇原创文章 · 获赞 3 · 访问量 1908

猜你喜欢

转载自blog.csdn.net/FeNGQiHuALOVE/article/details/105322593