Python图形图像处理库的介绍之Image模块
http://onlypython.group.iteye.com/group/wiki/1372-python-graphics-image-processing-library-introduced-the-image-module
Image模块的介绍
创建一个新的图片
- Image.new(mode, size)
- Image.new(mode, size, color)
层叠图片
层叠两个图片,img2和img2,alpha是一个介于[0,1]的浮点数,如果为0,效果为img1,如果为1.0,效果为img2。当然img1和img2的尺寸和模式必须相同。这个函数可以做出很漂亮的效果来,而图形的算术加减后边会说到。
- Image.blend(img1, img2, alpha)
composite可以使用另外一个图片作为蒙板(mask),所有的这三张图片必须具备相同的尺寸,mask图片的模式可以为“1”,“L”,“RGBA”(关于模式请参看前一篇)
- Image.composite(img1, img2, mask)
转换图形模式
下面看一个比较牛的方法convert,这个方法可以将图片在不同的模式间进行转换,在将灰度图转换成二值图时,所有的非零值被设置为255(白色)。灰度图的转换方式采用的是这个算法:
(此为ITU-R 610-2 亮度转换方程)
点操作
img.point(function),这个function接受一个参数,且对图片中的每一个点执行这个函数,这个函数是一个匿名函数,在python之类的函数式编程语言中,可以使用
lambda表达式来完成,如
- out = img.point(lambda i : i*1.2)#对每个点进行20%的加强
如果图片是“I”或者“F”模式,那么这个lambda必须使用这样的形式
- argument * scale + offset
- e.g
- out = img.point(lambda i: i*1.2 + 10)
透明通道的使用
putalpha(alpha)
这个方法是一个神奇的方法,你可以将一个图片(与原图尺寸相同)写入到原图片的透明通道中,而不影响原图片的正常显示,可以用于信息隐藏哦。当然,前提是原
始图片有透明通道。不过就算不是也没有多大关系,因为有PIL提供的convert功能,可以把一个图片先转换成RGBA模式,然后把要隐藏的信息文件转成“L”或者“1”模
式,最后使用这个putalpha将其叠加。而在图片的使用方,只需要简单的抽取其中的透明通道就可以看到隐藏信息了,哈哈。
- def hideInfoInImage(img, info):
- if img.mode != "RGBA":
- img = img.convert("RGBA")
- if info.mode != "L" and info.mode != "1":
- info = info.convert("L")
- img.putalpha(info)
- return img
测试之
- if __name__ == "__main__":
- img = Image.open("green.png")
- band = Image.open("antelope_inhalf.jpg")
- img = hideInfoInImage(img, band)
- img.show()#可以看到,原图片没有显式变化
- img.split()[3].show()#抽取出透明通道中的图片并显示
在windows系统中,默认的图片浏览器会把透明通道附加,可能会影响效果,可以用别的图片浏览器查看。
- def randomPalette(length, min, max):
- return [ randint(min, max) for x in xrange(length)]
调色板的使用
- putpalette(palette)
- img = Image.open("green.png").convert("L")
- #img.show()
- l = randomPalette(768, 0, 255)
- img.putpalette(l)
- img.show()
现将green.png转成灰度图,然后自定义一个随机调色板着色,可以看到这个效果。可能有人在想这个图形处理的作用,其实作用还是比较大的,做模式识别,人脸检
测等等操作事,真彩的图片往往很难处理,一个解决方案就是处理成灰度图或者二值图,一来可以去掉部分干扰,二来可以减少需要处理的数据量(提高效率)。
图片转换(扭曲,映射)
transform()方法的使用
- transform(size, method, data)
method参数:
EXTENT | 剪一个矩形出来(用以剪切,拉伸,压缩等操作) |
AFFINE | 几何防射转换 |
QUAD | 将一个四边形映射到一个矩形 |
MESH | 将多个四边形映射到一个操作 |
在EXTENT参数的情况下,data是一个四元组(x0,y0,x1,y1),表示输入图片中需要处理的区域,size为新图片的尺寸,是一个二元组(width, height)
用途:剪贴,拉伸,压缩等操作
在AFFINE参数的情况下,data是一个六元组(a,b,c, d,e,f),其中包含affine转置矩阵的前两行。对于输出图片的每个像素(x,y),会被新值(ax+by+c, dx+ey+f)替换。
用途:反转,旋转,剪切等
在QUAD参数的情况下,data是一个八元组(x0,y0,x1,y1,x2,y2,x3,y3)表示源四边形的四个定点的坐标值.MESH方式跟QUAD的效果相当,不过是对多个四边形进行映射操作.
transpose
- im.transpose(method)
method参数:
FLIP_LEFT_RIGHT | 左右倒置 |
FLIP_TOP_BOTTOM | 上下倒置 |
ROTATE_90 | 旋转90度(逆时针) |
ROTATE_180 | 旋转180度(逆时针) |
ROTATE_270 | 旋转270度(逆时针) |
(360度?这个就不用转了吧,呵呵)
关于Image模块就介绍到这里,还有一部分属性,函数和方法没有在此做分析,这部分比较简单,如果想了解更多,可以参看pil的handbook。
Python图形图像处理库的介绍之Image模块的更多相关文章
- Python常用的库简单介绍一下
Python常用的库简单介绍一下fuzzywuzzy ,字符串模糊匹配. esmre ,正则表达式的加速器. colorama 主要用来给文本添加各种颜色,并且非常简单易用. Prettytable ...
- python PIL 图像处理库简介(一)
1. Introduction PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处 ...
- python PIL图像处理库
1. Introduction PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. ...
- Python 图形 GUI 库 pyqtgraph
原文 Python 图形 GUI 库 pyqtgraph pyqtgraph 是纯 Python 图形 GUI 库,基于PyQT4 /pyside和NumPy.它主要目的用于在数学/科学/工程中.M ...
- python爬虫:爬虫的简单介绍及requests模块的简单使用
python爬虫:爬虫的简单介绍及requests模块的简单使用 一点点的建议: (学习爬虫前建议先去了解一下前端的知识,不要求很熟悉,差不多入门即可学习爬虫,如果有不了解的,我也会补充个一些小知识. ...
- windows下Python 3.x图形图像处理库PIL的安装
图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴.PIL (Python Imaging Library)是 Python 中最常用的图像处理库,目前 ...
- 3D图形图像处理软件HOOPS介绍及下载
HOOPS 3D Application Framework(以下简称HOOPS)是建立在OpenGL.Direct3D等图形编程接口之上的更高级别的应用程序框架.不仅为您提供强大的图形功能,还内嵌了 ...
- python——PIL(图像处理库)
PIL(Python Imaging Library,python图像处理库)提供了通用的图像处理功能,以及大量有用的基本图像操作,如图像缩放,裁剪,旋转,颜色转换等. 1.打开图像并显示 from ...
- Python 图形验证码库、二维码库的使用
1. 图形验证码库 captcha # 引入图形库 from captcha.image import ImageCaptcha # 获取图像对象 image = ImageCaptcha(width ...
随机推荐
- 求关注 wcf bindipendpointdelegate 端口限制的功能
我最近也需要实现一个功能:1)一个客户端(192.168.0.15),10个服务端(提供A接口.B接口)如下: 192.168.0.1-5685 192.168.0.2-5685 ...
- Java接口的表现形式
一.概念理解 Java接口是一些方法特征的集合,并没有方法的具体实现,类似于电源插座,可以充不同类型的电器,但是必须适配特定的接口规范.接口是抽象化的,所以其不能被实例化的(不能有构造函数,创建对象) ...
- ASP生成静态文件编码为UTF-8格式的HTML文件
一般在ASP环境下,运行动生静操作时都用到的是FSO,FSO是专门对文件进行操作的一个组件,FSO的编码属性只有三种,系统默认,Unicode,ASCII,并没有utf-8,所以一般中文系统上使用FS ...
- ASP.NET MVC 4应用程序文件夹
App_Start It has configuration classes to reduce clutter code in the Global.asax 它包含了配置类来减少在Global.a ...
- 未完待续的JAVA基础知识
第二卷 1.每个JAVA程序必须有一个main函数,但并非是每个类都有,main函数必须声明为static函数. 2.println与print之间的区别是换行与不换行. 3.在JAVA中,不想C/C ...
- c#调用JAVA的Webservice处理XML数据及批量轮询的实现方法
前段时间做一个调用外单位WEBSERVICE的项目,项目完成的功能其实很简单,就是我们单位有很多车友会员,我们想对他们提供车辆违章信息告之服务!我们这边交警部门给我们开放了WS的接口,我们就是想通过这 ...
- Docker Machine, Compose, and Swarm: How They Work Together
The three tools are now neatly packaged into what’s called the Docker Toolbox. Docker Machine1/ crea ...
- IO流详解(半教材类型)
这两天学习了IO流,整理了一些理论知识点,仅供参考. java流概述 一 流 从操作系统层面和文件系统,数据保存相关的是所有语言都具备的一个基本功能,java专门开发了一个包:java.io.*;ja ...
- 通过google找网站后台的方法
转自:http://cyuyanbiancheng.blog.hexun.com/69239903_d.html site:url.com '查看这个站点上的信息最好不加www,可以查看到不少的二级域 ...
- Java实战之04JavaWeb-07Listener和Filter
一.监听器Listener javaEE的13们规范中 包括servlet技术和jsp技术 servlet规范中包括三门技术:(servlet的三大组件) servelt技术 Listener技术 ...