Image模块

摘要:
Image.blendcomposite可以使用另外一个图片作为蒙版,所有的这三张图片必须具备相同的尺寸,mask图片的模式可以为"1","L","RGBA"Image.composite3、转换图形模式convert可以将图片在不同的模式间在不同的模式间进行转换,在将灰度图转换成二值图时,所有的非零值被设置为255(白色)。

1、创建一个新的图片

Image.new(mode,size)

Image.new(mode,size,color)

2、层叠图片

层叠两个图片,img1和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)

3、转换图形模式

convert可以将图片在不同的模式间在不同的模式间进行转换,在将灰度图转换成二值图时,所有的非零值被设置为255(白色)。灰度图的转换方式采用的是这个算法:

L= R*299/1000+G*587/1000+B*114/1000

点操作
img.point(function),这个function接受一个参数,且对图片中的每一个点执行这个函数,这个函数是一个匿名函数,在python之类的函数式编程语言中,可以使用
lambda表达式来完成,如

Python代码收藏代码
  1. out=img.point(lambdai:i*1.2)#对每个点进行20%的加强

如果图片是“I”或者“F”模式,那么这个lambda必须使用这样的形式

Python代码收藏代码
  1. argument*scale+offset
  2. e.g
  3. out=img.point(lambdai:i*1.2+10)

透明通道的使用
putalpha(alpha)
这个方法是一个神奇的方法,你可以将一个图片(与原图尺寸相同)写入到原图片的透明通道中,而不影响原图片的正常显示,可以用于信息隐藏哦。当然,前提是原
始图片有透明通道。不过就算不是也没有多大关系,因为有PIL提供的convert功能,可以把一个图片先转换成RGBA模式,然后把要隐藏的信息文件转成“L”或者“1”模
式,最后使用这个putalpha将其叠加。而在图片的使用方,只需要简单的抽取其中的透明通道就可以看到隐藏信息了,哈哈。

Python代码收藏代码
  1. defhideInfoInImage(img,info):
  2. ifimg.mode!="RGBA":
  3. img=img.convert("RGBA")
  4. ifinfo.mode!="L"andinfo.mode!="1":
  5. info=info.convert("L")
  6. img.putalpha(info)
  7. returnimg

测试之

Python代码收藏代码
  1. if__name__=="__main__":
  2. img=Image.open("green.png")
  3. band=Image.open("antelope_inhalf.jpg")
  4. img=hideInfoInImage(img,band)
  5. img.show()#可以看到,原图片没有显式变化
  6. img.split()[3].show()#抽取出透明通道中的图片并显示

Image模块第5张
Image模块第6张
在windows系统中,默认的图片浏览器会把透明通道附加,可能会影响效果,可以用别的图片浏览器查看。

Python代码收藏代码
  1. defrandomPalette(length,min,max):
  2. return[randint(min,max)forxinxrange(length)]

调色板的使用

Python代码收藏代码
  1. putpalette(palette)
  2. img=Image.open("green.png").convert("L")
  3. #img.show()
  4. l=randomPalette(768,0,255)
  5. img.putpalette(l)
  6. img.show()

Image模块第9张
现将green.png转成灰度图,然后自定义一个随机调色板着色,可以看到这个效果。可能有人在想这个图形处理的作用,其实作用还是比较大的,做模式识别,人脸检
测等等操作事,真彩的图片往往很难处理,一个解决方案就是处理成灰度图或者二值图,一来可以去掉部分干扰,二来可以减少需要处理的数据量(提高效率)。
图片转换(扭曲,映射)
transform()方法的使用

Python代码收藏代码
  1. transform(size,method,data)

method参数:

EXTENT剪一个矩形出来(用以剪切,拉伸,压缩等操作)
AFFINE几何防射转换
QUAD将一个四边形映射到一个矩形
MESH将多个四边形映射到一个操作

在EXTENT参数的情况下,data是一个四元组(x0,y0,x1,y1),表示输入图片中需要处理的区域,size为新图片的尺寸,是一个二元组(width, height)
用途:剪贴,拉伸,压缩等操作

Image模块第11张
在AFFINE参数的情况下,data是一个六元组(a,b,c, d,e,f),其中包含affine转置矩阵的前两行。对于输出图片的每个像素(x,y),会被新值(ax+by+c, dx+ey+f)替换。
用途:反转,旋转,剪切等

Image模块第12张
在QUAD参数的情况下,data是一个八元组(x0,y0,x1,y1,x2,y2,x3,y3)表示源四边形的四个定点的坐标值.MESH方式跟QUAD的效果相当,不过是对多个四边形进行映射操作.

Image模块第13张

transpose

Python代码收藏代码
  1. im.transpose(method)

method参数:

FLIP_LEFT_RIGHT左右倒置
FLIP_TOP_BOTTOM上下倒置
ROTATE_90旋转90度(逆时针)
ROTATE_180旋转180度(逆时针)
ROTATE_270旋转270度(逆时针)

(360度?这个就不用转了吧,呵呵)

关于Image模块就介绍到这里,还有一部分属性,函数和方法没有在此做分析,这部分比较简单,如果想了解更多,可以参看pil的handbook。

免责声明:文章转载自《Image模块》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ext3,ext4,xfs和btrfs文件系统性能对比小程序:web-view采坑指南下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python基础:数值(布尔型、整型、长整型、浮点型、复数)

一、概述 Python中的 数值类型(Numeric Types)共有5种:布尔型(bool)、整型(int)、长整型(long)、浮点型(float)和复数(complex)。 数值类型支持的主要操作如下: 操作 说明 bool int long float complex x ** y 指数运算 √ √ √ √ √ +x 符号不变 √...

游戏辅助脚本(python)

本文介绍怎样用Python写游戏辅助脚本 主要实现方式是通过图片的对比,在游戏中就行点击。运行程序需要以下东西。 PIL: 图片处理模块     (python3 换成了 pillow)  下载地址: https://www.lfd.uci.edu/~gohlke/pythonlibs/ pywin32 :  用来模拟点击用的      pip   ins...

python子进程模块subprocess详解与应用实例 之三

二、应用实例解析 2.1 subprocess模块的使用 1. subprocess.call >>> subprocess.call(["ls", "-l"]) 0 >>> subprocess.call("exit 1", shell=True) 1 2. 调用系统中cmd命令,显示命令执行的结果: x=subpro...

五. python 字符串方法函数

一 .字符串方法函数 什么是字符串就是以 单引号或者双引号引起来的任意文本'ancask的库时时刻刻'"ABC事实就是惊声尖叫 1. 创建字符串: str1="abcde骨灰盒fgaa" str2="abcde吾问无为谓fgaa" str3="abcdefg少时诵诗书所所aa" 2.字符串运算连接 str6="SKSDK就是死你KsbDSKDKSKK" s...

python的文件操作1,监控日志联系、读取大文件、修改文件、集合、元组、random模块以及函数初识

一、判断 #非空即真,非零即真# 非空(None,'',[],{})都是空umser=input('请输入姓名').strip()if umser:print('umser不为空')else:print('umser为空')print(len(umser)>0)if 1:print('真')else:print('假') 一、文件读写 fw=op...

python使用Opencv实时读取摄像头进行处理之后传到前端

参考链接: 读取多个(海康大华)网络摄像头的视频流 (使用opencv-python),解决实时读取延迟问题:https://zhuanlan.zhihu.com/p/38136322 websockets: https://github.com/aaugustin/websockets ----------------------------------...