图像处理课程老师留了一个自己做比特分层的作业,借此机会水一篇博文
代码废话不多说,直接上代码
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)
说实话,还是原图好看。。。。