http://www.jianshu.com/u/4943cb2c6ea4数组
❈Python用Pillow(PIL)进行简单的图像操做
颜色与RGBA值微信
计算机一般将图像表示为RGB值,或者再加上alpha值(通透度,透明度),称为RGBA值。在Pillow中,RGBA的值表示为由4个整数组成的元组,分别是R、G、B、A。整数的范围0~255。RGB全0就能够表示黑色,全255表明黑色。能够猜想(255, 0, 0, 255)表明红色,由于R份量最大,G、B份量为0,因此呈现出来是红色。可是当alpha值为0时,不管是什么颜色,该颜色都不可见,能够理解为透明。函数
图像的坐标表示post
图像中左上角是坐标原点(0, 0),这和日常数学里的坐标系不太同样。这样定义的坐标系意味着,X轴是从左到右增加的,而Y轴是从上到下增加。ui
在Pillow中如何使用上述定义的坐标系表示一块矩形区域?许多函数或方法要求提供一个矩形元组参数。元组参数包含四个值,分别表明矩形四条边的距离X轴或者Y轴的距离。顺序是(左,顶,右,底)。右和底坐标稍微特殊,表示直到但不包括。能够理解为[左, 右)和[顶, 底)这样左闭右开的区间。好比(3, 2, 8, 9)就表示了横坐标范围[3, 7];纵坐标范围[2, 8]的矩形区域。spa
使用Pillow操做图像3d
了解了一些基础知识,能够上手了。首先从读取图片开始,不少图像处理库(如opencv)都以imread()读取图片。Pillow中使用open方法。netty
im.size返回一个元组,分别是宽和高。show()方法会调用系统默认图像查看软件,打开并显示。im.format可查看图像的格式。save()可保存处理后的图片,若是未经处理,保存后的图像占用的空间(字节数)通常也与原图像不同,可能通过了压缩。code
新建图像
Pillow也能够新建空白图像, 第一个参数是mode即颜色空间模式,第二个参数指定了图像的分辨率(宽x高),第三个参数是颜色。
一、能够直接填入经常使用颜色的名称。如'red'
二、也能够填入十六进制表示的颜色,如#FF0000表示红色。
三、还能传入元组,好比(255, 0, 0, 255)或者(255, 0, 0)表示红色。
裁剪图像
Image有个crop()方法接收一个矩形区域元组(上面有提到)。返回一个新的Image对象,是裁剪后的图像,对原图没有影响。
看下原图和裁剪后的图像。
原图
裁剪后
复制与粘贴图像到另外一个图像
Image的copy函数如其名会产生一个原图像的副本,在这个副本上的任何操做不会影响到原图像。paste()方法用于将一个图像粘贴(覆盖)在另外一个图像上面。谁调用它,他就在该Image对象上直接做修改。
im.show()显示图像发现这时im(即原图)已经被改变。
这若是以后还会用到原图的信息,因为信息被改变就很麻烦。因此paste前最好使用copy()复制一个副本,在此副本操做,不会影响到原图信息。虽然在程序里原图信息已改变,但因为保存文件时用的其余文件名,至关于改变没有生效,因此查看的时候原图仍是没有改变的。
这回再看原图,没有改变了。这就保证了以后再次使用im时,里面的信息仍是原汁原味。来看个有趣的例子。
以裁剪后的图像宽度和高度为间隔,在循环内不断粘贴在副本中,这有点像是在拍证件照。
调整图像的大小
resize方法返回指定宽高度的新Image对象,接受一个含有宽高的元组做为参数。宽高的值得是整数。
兔子瘦了,能够看到resize不是等比例缩放的。
旋转和翻转图像
rotate()返回旋转后的新Image对象, 保持原图像不变。逆时针旋转。
90
180
270
20
由上到下,分别是旋转了90°,180°, 270°、普通的20°,加了参数expand=True旋转的20°。expand放大了图像尺寸(变成了2174x1672),使得边角的图像不被裁剪(四个角恰好贴着图像边缘)。再看旋转90°、270°时候图像被裁剪了,可是以下查看图像的宽高,确是和原图同样,搞不懂。
图像的镜面翻转。transpose()函数能够实现,必须传入Image.FLIP_LEFT_RIGHT或者Image.FLIP_TOP_BOTTOM,第一个是水平翻转,第二个是垂直翻转。
水平翻转
水平翻转看不出来,原图就是水平对称的...
垂直翻转
垂直翻转就明显了...
图像过滤
Pillow使用ImageFilter能够简单作到图像的模糊、边缘加强、锐利、平滑等常见操做。
另外,如果要进行图案、文字的绘制,可以使用ImageDraw。Pillow还有其余强大功能,就不一一列举了。
其实,Pillow只是个基础的图像处理库。若不深刻图像处理,已经够用。专业人士使用opencv是更好地选择。Python中使用import cv2开始使用吧!
长按扫描关注Python中文社区,
获取更多技术干货!
Python 中 文 社 区
Python中文开发者的精神家园
合做、投稿请联系微信:
pythonpost
— 人生苦短,我用Python —本文为做者原创做品,未经做者受权赞成禁止转载
点击阅读原文加入全国金融行业Python开发者联盟
在公众号底部回复“XFJR”加入Python消费金融联盟
在公众号底部回复“LHJY”加入Python量化交易联盟
微信扫一扫关注该公众号