比特平面分层——Python实现

Gelsey ·
更新时间:2024-11-13
· 919 次阅读

图像处理课程老师留了一个自己做比特分层的作业,借此机会水一篇博文

代码

废话不多说,直接上代码

from PIL import Image import numpy as np img = Image.open("./origin.jpg").convert('L') img.save('BandW.jpg') arr = np.asarray(img) fltr = np.int8(np.ones(arr.shape)) for i in range(8): Image.fromarray(((fltr*(2**i))&arr)* 2 ** (7-i)).convert('L').save(f'{i}.jpg') 原理说明:

首先用pillow读入图片,然后把图片用convert方法转成黑白图。

img = Image.open("./origin.jpg").convert('L') img.save('BandW.jpg')

然后把图片转成np.array

arr = np.asarray(img)

然后通过位与(&)的方法获取每一位,并保存。先生成一个滤波器数组fltr,然后通过每次乘2完成移位。并保存图像

fltr = np.int8(np.ones(arr.shape)) for i in range(8): Image.fromarray(((fltr*(2**i))&arr)* 2 ** (7-i)).convert('L').save(f'{i}.jpg')

好啦,水完了,希望对你有帮助!如果你也是完成作业,希望你看懂之后再自己复现一下。

效果图

原始图片如下
在这里插入图片描述灰度图如下
在这里插入图片描述0层到7层分别如下(即[0…7].jpg)
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
说实话,还是原图好看。。。。


作者:China_JTJ



Python 比特

需要 登录 后方可回复, 如果你还没有账号请 注册新账号