python image.open 参数作用_Python图形图像处理库的介绍之Image模块 - Django's blog
http://onlypython.group.iteye.com/group/wiki/1372-python-graphics-image-processing-library-introduced-the-image-module
Image模块
的介绍
创建一个新的图片
Python代码
Image.new(mode, size)
Image.new(mode, size, color)
层叠图片
层叠两个图片,img2和img2,alpha是一个介于[0,1]的浮点数,如果为0,效果为img1,如果为1.0,效果为img2。当然img1和img2的尺寸和模式必须相同。这个函数可以做出很漂亮的效果来,而图形的算术加减后边会说到。
Python代码
Image.blend(img1, img2, alpha)
composite可以使用另外一个图片作为蒙板(mask),所有的这三张图片必须具备相同的尺寸,mask图片的模式可以为“1”,“L”,“RGBA”(关于模式请参看前一篇)
Python代码
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代码
out = img.point( lambda
i : i* 1.2
) #对每个点进行20%的加强
如果图片是“I”或者“F”模式,那么这个lambda必须使用这样的形式
Python代码
argument * scale + offset
e.g
out = img.point( lambda
i: i* 1.2
+ 10
)
透明通道的使用
putalpha(alpha)
这个方法是一个神奇的方法,你可以将一个图片(与原图尺寸相同)写入到原图片的透明通道中,而不影响原图片的正常显示,可以用于信息隐藏哦。当然,前提是原
始图片有透明通道。不过就算不是也没有多大关系,因为有PIL提供的convert功能,可以把一个图片先转换成RGBA模式,然后把要隐藏的信息文件转成“L”或者“1”模
式,最后使用这个putalpha将其叠加。而在图片的使用方,只需要简单的抽取其中的透明通道就可以看到隐藏信息了,哈哈。
Python代码
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代码
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代码
def
randomPalette(length, min, max):
return
[ randint(min, max) for
x in
xrange(length)]
调色板的使用
Python代码
putpalette(palette)
img = Image.open( "green.png"
).convert( "L"
)
#img.show()
l = randomPalette( 768
, 0
, 255
)
img.putpalette(l)
img.show()
现将green.png转成灰度图,然后自定义一个随机调色板着色,可以看到这个效果。可能有人在想这个图形处理的作用,其实作用还是比较大的,做模式识别,人脸检
测等等操作事,真彩的图片往往很难处理,一个解决方案就是处理成灰度图或者二值图,一来可以去掉部分干扰,二来可以减少需要处理的数据量(提高效率)。
图片转换(扭曲,映射)
transform()方法的使用
Python代码
transform(size, method, data)
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代码
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.open 参数作用_Python图形图像处理库的介绍之Image模块 - Django's blog相关推荐
- python命令行参数作用_Python命令行参数解析模块argparse
前言 更多内容,请访问我的 个人博客. 以前 optparse 比较火,但是在python2.7版本后,官方不再维护这个模块,转而大力支持 argparse . argparse 模块可以让人轻松编写 ...
- python匿名函数的作用_Python匿名函数 Lambda表达式作用
在Python这门优美的编程语言中,支持一种有趣的语法格式(表达式),可以让我们在单行内创建一个最小的函数-python lambda匿名函数. 据说是借鉴了Lisp语言中lambda表达式,它可以使 ...
- python turtle画滑稽表情_python使用turtle库绘制奥运五环
python使用turtle库绘制奥运五环 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令 ...
- python如何调用参数配置文件_python参数设置
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 网上django大部分都是在命令行中运行manage.py时添加参数,没有涉及到 ...
- python图像库_Python常用图像处理库整理
1. 库简介 深度学习领域,对视频图片样本的处理占了很大一部分比重. 而Python环境下的图像处理库种类较多,无论是精度,速度等方面都有不同的差异,这里予以总结. Python环境下,相关的包有: ...
- python图像对比_Python多种图像处理库的比较与比较
我帮助在libvips wiki 上维护一个页面,比较20个左右的常用图像处理库,以便快速和内存使用,包括相当多的Python系统. 基准测试非常简单:加载5,000 x 5,000像素RGB TIF ...
- python中time的函数_python中time库的time.time()函数的作用是什么
python中time库的time.time()函数的作用是什么 python中time库的time.time()函数的作用是什么? 作用:Python time time() 返回当前时间的时间戳( ...
- python命令行参数 空格_Python 命令行参数
Python 命令行参数 Python 提供了 getopt 模块来获取命令行参数. $ python test.py arg1 arg2 arg3 Python 中也可以使用 sys 的 sys.a ...
- python布尔值的作用_Python基础教程详解布尔变量的作用
布尔值也叫真值,在Python开发(http://www.maiziedu.com/course/python-px/)中所有的值都被解释为真值,标准的真值为true和false.那么布尔变量在Pyt ...
最新文章
- python【力扣LeetCode算法题库】365- 水壶问题(裴蜀等式)
- 地铁译:Spark for python developers --- 搭建Spark虚拟环境 4
- 如何查看ddos 放开的ip
- html5 实现坦克大战,HTML5实现坦克大战(一)
- 数学--数论--HDU - 6322 打表找规律
- 大数据之旅--Hadoop的发展史
- 【MyBatis框架】Mybatis开发dao方法第一部分
- “金牛智慧城市”APP上线 一键可查找公厕和公园
- C++ std::pair<,> 是什么怎么用
- 关于Big-Endian 和Little-Endian
- Java 最长递增子序列_最长递增子序列问题 Java
- 赵小楼《天道》《遥远的救世主》深度解析(16)丁元英停止私募基金不可言说的原因
- 由内而外全面造就自己(七)
- 功能测试————Siri
- 共筑未来 | 思腾合力加入光合组织,完成国产信创兼容适配
- [附源码]JAVA+ssm计算机毕业设计餐厅点餐订餐系统(程序+Lw)
- 基于北斗RDSS短报文的海洋浮标在线水质/气象综合监测系统
- 经典算法应用之七----10亿数据中取最大的100个数据
- 大学生生涯规划1000字计算机专业,我的职业生涯规划计算机专业1000字
- Android平台GB28181设备接入模块之球机/云台控制探究
热门文章
- html 双 直线 公文,公文排版格式(二)
- 河北省省赛重现赛-K Multiple Longest Commom Subsequence
- 必应词典android版的一个bug
- Oracle 表详解(table)
- 公司经营管理中存在的几个问题
- Android Studio出现Enable VT-x in your BlOS security settings, ensure that your Linux distro ha
- 物联网毕业设计 单片机空气质量检测仪
- Spring源码深度解析(郝佳)-学习-Bean Id 获取
- 超简单案例:分层卡方检验怎么做?
- 黑马程序员------毕老师视频笔记第七天------面向对象(模板方法设计模式)