查看原文
其他

教你把Python当美图秀秀用(二)

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:钱梦璇

文字编辑:孙晓玲

技术总编:张   邯

导读

在《教你把Python当美图秀秀用(一)》中介绍了PIL图形处理库以及一些图像处理方法,本文将继续介绍更有趣的其他方法,一起来感受下它的神奇吧。

 美图秀秀功能之五:图像的过滤

有时候我们希望在美图秀秀中将一个图像模糊化,或者说对图像中的人物轮廓化、锐化等,有些滤镜可以帮我们做到这些。同样地,PIL库中的Image类也可以实现这些操作。

采用的方法是ImageFilter模块中的filter函数,此函数会返回一个给定滤波器处理过的图像的拷贝。这就类似在神经网络中的滤波器一样,不同的滤波器会观测到不同的特征。

from PIL import Image from PIL import ImageFiltercat=Image.open('喵星人.jpg')cat.show()

展示将要处理的图像:

应用一些过滤器操作:

cat_blur=cat.filter(ImageFilter.BLUR)cat_blur.show()cat_edge=cat.filter(ImageFilter.FIND_EDGES)cat_edge.show()cat_shap=cat.filter(ImageFilter.SHARPEN)cat_shap.show()

ImageFilter模块中,预定义了很多增强滤波器,比如BLUR均值滤波,对图像进行模糊处理,FIND_EDGES用于对边缘进行检测,SHARPEN对图像进行锐化,这些都是美图秀秀调整图像时的操作。

三种处理展示的图像如下所示:


美图秀秀功能之六:图像的合并

Image中的blend方法可以使用给定的两张图像以及透明度α,插值出一张新的图像,它的函数格式为Image.blend(image1,image2, alpha)。合成的公式为:image1 (1.0 - alpha) +image2 alpha.如果透明度变量α值为0.0,返回的是第一张图像,如果为1.0,则返回第二张图像。

但需要注意的是,合并的两张图像必须有一样的尺寸和模式。采用上篇文章中的猫猫图像,将两张图像设置为相同的尺寸。

cat2=Image.open('猫猫.jpg','r')cat2.show()print(cat.size,cat2.size)

由于两张图像的尺寸不同,通过resize函数将cat2的图像大小变为(237,311)。

cat2=cat2.resize((237,311))print(cat2.size)

接下来,只需设置透明度变量alpha为0.5,利用blend函数将两张图像合并在一起。

catmerge=Image.blend(cat,cat2,0.5)catmerge.show()

怎么样,过瘾了吗?下面来一个小彩蛋!~~ 

美图秀秀也没有的功能:图像序列的遍历

小编有时在看到一个可爱的gif动图时,只想保存动图中某个瞬间的图像,这时PIL同样可以帮上忙。

通过图像序列ImageSequence模块可以遍历gif图像中的所有帧,并保存为图像。其实,这里的帧指的是动画中最小单位的单幅动画画面,也就是动图中的某个瞬间,相当于电影胶片上的每一格镜头。

导入如下所示的小黄人动图:

from PIL import ImageSequencefrom PIL import Imagegif = Image.open("小黄人动图.gif")for i,frame in enumerate(ImageSequence.Iterator(gif)): if frame.mode == 'JPEG': frame.save("%d.jpg" %i) else: frame.save("%d.png" % i)

通过ImageSequence模块中的迭代器来遍历小黄人动图中的所有帧,并根据图像格式和数字对每个图像命名。

最终得到的14张图像如下所示:

同样,你也可以拿它做电影片段每一帧的保存,这样就可以做成豆瓣上的那种影视经典画面的分享图啦!







对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
自己动手进行线性回归计算
personage与年龄
原来这才是查看盲评结果的正确方式
教你把Python当美图秀秀用(一)
用数据透视表剖析泰坦尼克号乘客数据
读入文本文档,intext来帮忙
matchit——解锁文本相似度的钥匙
基于广义线性模型的机器学习算法——线性回归
听说你会魔法?
dummieslab——从分类变量到虚拟变量的“一步之遥”
线上Python课程都面向哪些方向?
子类与父类
用requests库爬取淘宝数据
WordStat—Stata的文本分析小助手
数据筛选理还乱,datacheck能诊断

如何用简单的手法绘制出不一样的海外疫情趋势图

matplotlib绘制数学函数

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存