Image模块的介绍
创建一个新的图片
Python代码
双击代码全选
1
2
|
Image.new(mode, size)
Image.new(mode, size, color)
|
层叠图片
层叠两个图片,img2和img2,alpha是一个介于[0,1]的浮点数,如果为0,效果为img1,如果为1.0,效果为img2。当然img1和img2的尺寸和模式必须相同。这个函数可以做出很漂亮的效果来,而图形的算术加减后边会说到。
Python代码
双击代码全选
1
|
Image.blend(img1, img2, alpha)
|
composite可以使用另外一个图片作为蒙板(mask),所有的这三张图片必须具备相同的尺寸,mask图片的模式可以为“1”,“L”,“RGBA”(关于模式请参看前一篇)
Python代码
双击代码全选
1
|
Image.composite(img1, img2, mask)
|
转换图形模式
下面看一个比较牛的方法convert,这个方法可以将图片在不同的模式间进行转换,在将灰度图转换成二值图时,所有的非零值被设置为255(白色)。灰度图的转换方式采用的是这个算法:
写道
L = R*299/1000 + G*587/1000 + B*114/1000
(此为ITU-R 610-2 亮度转换方程)
点操作
img.point(function),这个function接受一个参数,且对图片中的每一个点执行这个函数,这个函数是一个匿名函数,在python之类的函数式编程语言中,可以使用
lambda表达式来完成,如
Python代码
双击代码全选
1
|
out = img.point( lambda i : i * 1.2 )
|
如果图片是“I”或者“F”模式,那么这个lambda必须使用这样的形式
Python代码
双击代码全选
1
2
3
|
argument * scale + offset
e.g
out = img.point( lambda i: i * 1.2 + 10 )
|
透明通道的使用
putalpha(alpha)
这个方法是一个神奇的方法,你可以将一个图片(与原图尺寸相同)写入到原图片的透明通道中,而不影响原图片的正常显示,可以用于信息隐藏哦。当然,前提是原
始图片有透明通道。不过就算不是也没有多大关系,因为有PIL提供的convert功能,可以把一个图片先转换成RGBA模式,然后把要隐藏的信息文件转成“L”或者“1”模
式,最后使用这个putalpha将其叠加。而在图片的使用方,只需要简单的抽取其中的透明通道就可以看到隐藏信息了,哈哈。
Python代码
双击代码全选
1
2
3
4
5
6
7
|
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
|
测试之
Python代码
双击代码全选
1
2
3
4
5
6
|
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系统中,默认的图片浏览器会把透明通道附加,可能会影响效果,可以用别的图片浏览器查看。
Python代码
双击代码全选
1
2
|
def randomPalette(length, min , max ):
return [ randint( min , max ) for x in xrange (length)]
|
调色板的使用
1
2
3
4
5
6
|
putpalette(palette)
img = Image. open ( "green.png" ).convert( "L" )
l = randomPalette( 768 , 0 , 255 )
img.putpalette(l)
img.show()
|
现将green.png转成灰度图,然后自定义一个随机调色板着色,可以看到这个效果。可能有人在想这个图形处理的作用,其实作用还是比较大的,做模式识别,人脸检
测等等操作事,真彩的图片往往很难处理,一个解决方案就是处理成灰度图或者二值图,一来可以去掉部分干扰,二来可以减少需要处理的数据量(提高效率)。
图片转换(扭曲,映射)
transform()方法的使用
Python代码
双击代码全选
1
|
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
Python代码
method参数:
FLIP_LEFT_RIGHT |
左右倒置 |
FLIP_TOP_BOTTOM |
上下倒置 |
ROTATE_90 |
旋转90度(逆时针) |
ROTATE_180 |
旋转180度(逆时针) |
ROTATE_270 |
旋转270度(逆时针) |
(360度?这个就不用转了吧,呵呵)
关于Image模块就介绍到这里,还有一部分属性,函数和方法没有在此做分析,这部分比较简单,如果想了解更多,可以参看pil的handbook。
分享到:
相关推荐
主要介绍了Python Image模块基本图像处理操作,结合实例形式总结分析了Python图形处理模块Image常用的图形处理函数、功能及相关使用技巧,需要的朋友可以参考下
用户可以使用这个模块创建新的图像,注释或润饰已存在图像,为web应用实时产生各种图形。 PIL中一个更高级绘图库见The aggdraw Module 一、ImageDraw模块的概念 1、 Coordinates 绘图接口使用和PIL一样的坐标系统,...
本文实例讲述了Python图像处理模块ndimage用法。分享给大家供大家参考,具体如下: 一 原始图像 1 代码 from scipy import misc from scipy import ndimage import matplotlib.pyplot as plt face = misc.face()#...
什么是Tkinter? Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。 由于 Tkinter 是内置到 python 的安装包中、只要... Image,Imagetk:从PIL导入,即Python Imaging Library。我
您可以将gmic Python模块用于与台式机或服务器端图形软件,numpy,视频游戏,图像处理相关的项目。 请访问以获取快速入门,教程,API参考和gmic-py第三方集成。 gmic-py缓慢增长的社区gmic-py着周围: 这个 , ...
python PIL图像处理模块中的ImageDraw类支持各种几何图形的绘制和文本的绘制,如直线、椭圆、弧、弦、多边形以及文字等。 下面直接通过示例来进行说明: #-*- coding: UTF-8 -*- import numpy as np from PIL ...
Images 计算机图形学和图像处理研究实验室内容图像实验室[项目01] 克隆存储库git clone https://github.com/flaviojoliveira/CG_Processamento_Imagenscd projeto2创建虚拟环境后(使用最新版本) python3 -...
在Android平台上进行图像处理软件开发成本低,本文基于Android系统的JAVA开发平台利用OpenCV计算机视觉库,在包含多种简单图形的图像中,将具体图形例如三角形、圆形、菱形、长方形的个数识别和计算出来。...
mri_works是一个用Python编写的图形编程软件,主要用于MRI图像处理。它可以与许多软件和API接口: Python:Numpy,Nilearn,Scipy,Matplotlib,Nipype(集成了FSL,Ants,SPM,AFNI) Java:ImageJ,MRIFileManager...
根据图像中观察到的内容自动生成自然语言描述的图像字幕是场景理解的重要组成部分,它将计算机视觉知识和自然语言处理结合起来。 可以使用“深度学习”将该想法付诸实践。图像字幕任务在逻辑上分为两个模块。 第一...