对整张图片进行打码操作,选择一个10*10的小正方形图片,然后对其像素进行随机打乱
#马赛克图片
from skimage import img_as_float
import matplotlib.pyplot as plt
from skimage import io
import random
import numpy as np
file_name='11.jpg'
img=io.imread(file_name)#读
img = img_as_float(img)#图像数据类型转换为float
img_out = img.copy()
row, col, channel = img.shape#得到图片的宽高和维度
half_patch =10#选择一个10*10的小方块,马赛克大小
#遍历,从10到(图片的宽-1-10),每次步长为(10),即横向(纵向)糊马赛克
for i in range(half_patch, row-1-half_patch, half_patch):
for j in range (half_patch, col-1-half_patch, half_patch):
k1 = random.random() #用于生成一个0到1的随机符点数
k2 = random.random()
m=np.floor(k1*(half_patch*2 + 1))#np.floor()返回不大于输入参数的最大整数。(向下取整)
n=np.floor(k2*(half_patch*2 + 1))
#防止溢出
h=int((i+m) % row)
w=int((j+n) % col)
#图像的长、宽打乱
img_out[i-half_patch:i+half_patch, j-half_patch:j+half_patch, :] =img[h, w, :]
plt.figure(1)
plt.imshow(img)
plt.axis('off')#关闭坐标轴
plt.figure(2)
plt.imshow(img_out)
plt.axis('off')
plt.show()