加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

python对图片加密显示

(2017-12-22 13:39:07)
标签:

it

分类: python图像处理
1、思路
RGB图像每个像素有3个0~255的数字。如果把数字化为二进制,对这个二进制数进行处理,这里使用逆向排列(也可以使用其他排列法),例如:143→0b10001111→10001111→11110001→0b11110001→241(0b代表二进制)。然后换回十进制,这个像素的三个点将完全不一样,最后图片也完全变了。
2、图片素材http://s13/mw690/005JTcFkzy7gM9mWSte5c&690

3、代码

定义函数,这个函数功能为输入一个数x,
伪代码:
转为二进制(bin(x).replace('0b','')),
这个二进制
        如果是八位:
                逆向排列:bin(x).replace('0b','')[::-1]
        如果不是八位则前面添0(如11→00000011)
                然后再逆向排列:bin(x).replace('0b','')[::-1](如00000011→11000000)
上述二进制前面加‘0b’,再转回十进制数字int( ?,2)
代码:
def jiami(x):
    leng=len(bin(x).replace('0b',''))
    if leng==8:   #如果位数为8
        return int('0b'+(bin(x).replace('0b','')[::-1]),2)
    else:     #之所以用else ,因为要先变成8位二进制
        return int('0b'+((8-leng)*'0'+bin(x).replace('0b',''))[::-1],2)

导入图片并调用函数jiami()处理
from skimage import io
x=io.imread('C:\\Users\\Administrator\\Desktop\\picture\\光辉\\光辉2.jpg')#图片路径根据自己更改
io.imshow(x)
i,j,k=x.shape
y=uint8(zeros(x.shape))
for q in range(i):
    for w in range(j):
        for r in range(k):
            y[q,w,r]=jiami(x[q,w,r])
io.imshow(y)
新图片:
对y执行上述这一系列操作,会返回z(z等于之前导入的图片x),即解码 (逆序再逆序得到正序)
i,j,k=y.shape
z=uint8(zeros(y.shape))
for q in range(i):
    for w in range(j):
        for r in range(k):
            z[q,w,r]=jiami(y[q,w,r])
io.imshow(z)
io.imsave('C:\\Users\\Administrator\\Desktop\\picture\\光辉\\光辉test1.jpg',z)

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有