本文作者:钱梦璇
文字编辑:孙晓玲
技术总编:张 邯导读
Python中有一个第三方图像数据库,由于其强大功能和简单易用的API几乎被认为是Python平台上的官方图像处理库了,它就是PIL(PythonImage Library)。
PIL原来只支持到Python2.x版本,但后来一些志愿者们在它的基础上添加了许多新特性,并移植到Python3.x库中,更名为Pillow。如果你的电脑上安装了Anaconda就不需要再下载Pillow,否则可以通过pip进行安装。
接下来通过一些小栗子,一起来体会它的“美图”功能。
美图秀秀功能之一:图像的导入与信息查看在对图像进行处理之前,首先我们需要从文件中加载一张图像或者从头创造一张图像,那么在本文中介绍的将是根据已有的图像进行操作。
如何加载图像并查看它的信息,以及处理之后如何保存呢?PIL中的核心类—Image可以帮我们实现。
from PIL import Image wyb = Image.open('王一博.jpg','r') wyb.show()print(wyb.size,wyb.format,wyb.mode)
和打开其他文件的方式一样,Image中同样利用open(filename,mode)函数打开图像,并返回一个Image对象,通过show函数可以展示得到的wyb图像,如下所绘。
通过返回对象的属性,来查看图像信息。其中,size通过像素表示打开图像的大小——宽度和高度,每一个像素代表一个坐标单位;format表示图像的格式,包括PNG、JPEG等;mode表示图像的模式,包括RGB、HSV等。返回的信息如下所示:
美图秀秀功能之二:图像的裁剪
根据图像的大小,我们可以截取指定位置的图像,这也就是美图秀秀的“裁剪图片”功能啦。裁剪图像用的函数为crop(box),它返回的也是一个Image对象,其中box是一个含有四个数字的元组,前两个数字表示裁剪的矩形图像区域中左上角的横纵坐标,后两个数字代表右下角的横纵坐标。
如果想要裁剪上图中王一博的头部图像,我们可以根据wyb.size判断大概的位置信息。
matrix = (250,150,800,600)wyb_head = wyb.crop(matrix)wyb_head.show()
根据左上角的横纵坐标250,150和右下角的横纵坐标800,600,截取到的图像如下所示:
如果要对处理后的图像进行保存,可以使用save(filename,format)函数来保存指定格式的图像。
wyb_head.save('头.png','png')
美图秀秀功能之三:图像的增强
用美图秀秀P图的时候,我们经常在“增强”选项中提高图像的亮度、对比度等。这些功能利用PIL库同样可以搞定!
图像增强函数ImageEnhance是PIL下面的一个子类,我们以增加亮度和增加对比度为例,感受一下它的神奇之处。
from PIL import ImageEnhancebright = ImageEnhance.Brightness(wyb)wyb_bright = bright.enhance(1.5)wyb_bright.show()
ImageEnhance.Brightness用于增加图片的亮度,并返回一个Image对象bright。同样利用“王一博.jpg”图像,通过enhance方法将的亮度增加50%,结果如下所示:
也可以使用ImageEnhance.Contrast增加图片的对比度。为了感受处理后的图像与原始图像的区别,enhance的参数设置为2,表示将对比度增加100%,即原来的2倍。
contrast=ImageEnhance.Contrast(wyb)wyb_contrast=contrast.enhance(2) #亮度增加100%wyb_contrast.show()
结果如下:
美图秀秀功能之四:图像模式的转换
一般我们看到的图片都是RGB模式,也就是真彩图,其实图像有多种模式,如1、L、P、CMYK等等。我们以将一个猫猫图像转换成灰度图(L)和二值图像(1)为例,感受Image的“滤镜”功能。
cat=Image.open('猫猫.jpg','r')cat.show()
灰度模式图像有256个可能的灰色值,我们将图像转换为灰度图,对应的模式为“L”,这一转换需要利用convert(mode)方法。
cat_L=cat.convert("L")cat_L.show()
对应的图像如下所示:
二值图像的每个像素上只有两个可能的值,黑色或者白色,模式为“1”。利用同样的方法将原始的真彩图转换为“1”模式。
cat_1=cat.convert("1")cat_1.show()
二值图像如下所示:
PIL中还有其他模式的图像,都可以利用convert方法转换。
当然以上介绍的只是PIL可实现的众多功能中微不足道的几种方法啦~后续小编仍会带领大家学习其他有趣的图像处理方法~
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持! 往期推文推荐 用数据透视表剖析泰坦尼克号乘客数据 读入文本文档,intext来帮忙 matchit——解锁文本相似度的钥匙 基于广义线性模型的机器学习算法——线性回归 听说你会魔法? dummieslab——从分类变量到虚拟变量的“一步之遥” 线上Python课程都面向哪些方向? 子类与父类 用requests库爬取淘宝数据 WordStat—Stata的文本分析小助手 数据筛选理还乱,datacheck能诊断如何用简单的手法绘制出不一样的海外疫情趋势图
matplotlib绘制数学函数 gen的再进化 Stata版大家来找茬—cfout就够了 另辟蹊径js逆向爬取百度翻译 可迭代对象、迭代器、生成器傻傻分不清楚关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。 投稿邮箱:[email protected] 投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。