pillow库基础

目录

前言

一、代码展示

二、代码讲解


前言

pillow是python中的第三方图像处理库,功能强大,可以不仅可以裁剪图像,调整图像大小和图像颜色,还可以做滤镜。有了这个强大的帮手,生活好像容易了好多!


一、代码展示

from PIL import Image, ImageFilter
import matplotlib.pyplot as plt

img = Image.open("soldier1.jpg")
filters = [
    ImageFilter.BLUR,
    ImageFilter.CONTOUR, 
    ImageFilter.EDGE_ENHANCE,
    ImageFilter.EMBOSS,
    ImageFilter.SHARPEN,
    ImageFilter.SMOOTH,
]
#img.filter(filters[index])足以实现一个滤镜效果
#以下操作包含另一个知识——将滤过镜的图片贴到画布上
def isvalid(num,lst):
    if len(lst)%num==0:
        return num
    else:
        print(f"invalid input")
        os._exit(0)

row=isvalid(2,filters)
column=int(len(filters)/row)
_,axes=plt.subplots(row,column,figsize=(20,20))#大画布有多少行多少列
for i in range(row):
    for j in range(column):
        index=j+column*i#把有序数对转化成索引
        img_= img.filter(filters[index])
        axes[i][j].imshow(img_)#plt.imshow()函数每次只载入一张图片
        axes[i][j].set_title(filters[index].name)#起名字

plt.show()#展示画布

二、代码讲解

这段代码主要是对图片soldier1.jpg进行一个图像处理(大家可以自行使用自己的图片,但是图片一定要和程序保存到同一文件夹内,除非使用绝对路径)。首先img=Image.open()打开图片,然后用plt.subplots()创建有两行三列的画布。isvalid()函数就是用来测试用户输入的row(行数)是否能被列表filters整除,因为后面要用列表的每一个元素处理原图,然后分别展示处理后图片到子画布中,也就是说filters中元素总量=画布图片数量。

我们想知道到底filters里面的元素都能实现什么效果。第一个blur是模糊,第二个是只显示图片线条,第三个是边缘增强,第四个emboss浮雕,第五个sharpen是锐化,最后一个smooth是柔化。嵌套循环把一条列表里的元素以几行几列形式展示到画布上。真正实现滤镜效果的代码其实是:img_=img.filter(),比如img.filter(ImageFilter.BLUR)就是给图片img模糊化,并返回模糊化后的图片img_。

接下来就到了展示图片的环节。axes[i][j].imshow()是加载图片到第i行第j列的子画布。然后set_title()给图片起名,这里使用 .name方法自动起名,比如ImageFilter.BLUR.name就返回Blur这个名字。


总结

这篇文章核心内容就是img.filter()(括号里面写入的是滤镜模式),只要你会使用他,并会通过subplots()来展示图片,你就过关了。

你可能感兴趣的:(pillow,python,图像处理)