- 浏览: 452787 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
进退取舍:
谢谢,这个用上了!!
Java 一个线程池的示例 -
pb_water:
感谢楼主,打算买楼主的书,支持一下,楼主功德无量
JavaScript内核系列第0版整理稿下载 -
lancezhcj:
有图会直观的多呢,再摸索摸索
有限自动机与建模 -
hsmsyy:
这里应该是原创了吧,楼主我觉得闭包的作用:实现面向对象。有待商 ...
JavaScript内核系列 第7章 闭包 -
wll52:
在应用退出之前,需要释放连接 con.disconnect() ...
使用smack与GTalk通信
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。
评论
用动态语言处理处理图像的点操作之类简直太方便、太合适了,如果不考虑效率的话。效率是个致命问题,所以PS永远不可能用Python或Ruby写。
效率未必低吧。pil只是入口,内部还是C。
比如点操作,主要的处理部分还是那个 Python 的 lambda 函数,再加上跨语言的时间消耗,效率肯定会低不少。
另外还有内存问题。图像处理以消耗内存而著称,像我们处理的图像经常会超过1G,自动内存收集的静态语言(C#,Java)都不好使,更不要说动态语言了。
但是用c/c++实现类似的点操作功能的话,要用函数指针或者虚基类,相当麻烦,代码远不如Python这么清爽。
用动态语言处理处理图像的点操作之类简直太方便、太合适了,如果不考虑效率的话。效率是个致命问题,所以PS永远不可能用Python或Ruby写。
效率未必低吧。pil只是入口,内部还是C。
是的,这个包使用C开发的,处理效率还过得去,不过脚本语言嘛,主要用于定制或者扩展已有的应用,效率方面要求是不那么高的。PS肯定不会被脚本语言代替。不过,借助PIL,很可能自己做一个python版的PS,呵呵
用动态语言处理处理图像的点操作之类简直太方便、太合适了,如果不考虑效率的话。效率是个致命问题,所以PS永远不可能用Python或Ruby写。
效率未必低吧。pil只是入口,内部还是C。
用动态语言处理处理图像的点操作之类简直太方便、太合适了,如果不考虑效率的话。效率是个致命问题,所以PS永远不可能用Python或Ruby写。
一定的,关于这个超级牛的图形库我也正在学习阶段,所以更新可能会慢一些,但是我一定会把学习中的心得贴出来。谢谢关注。
发表评论
-
JavaScript内核系列 第15章 服务器端的JavaScript
2012-02-12 21:39 2335第15章已经在icodeit上发布,这一章分为上/下两篇,请朋 ... -
使用vim开发python及graphviz绘图
2011-12-23 14:49 6463基本需求 使用vim中的autocmd命令可以很容易的将正在 ... -
Java脚本技术应用实例
2011-01-22 11:24 4276前言 一直以来都很喜欢可以自由扩展的软件,这一点应该已经在很 ... -
可编程计算器(phoc)的设计与实现
2011-01-17 11:34 1989前言 借助JavaScript脚本 ... -
函数式编程(javascirpt)
2009-04-18 22:18 1275前言 Javascript,有人称 ... -
C和指针
2009-05-21 23:15 1122前言 指针是C的灵魂,正是指针使得C存在了这么多年,而且将长 ... -
C和指针(续)
2009-05-25 23:41 1363前言 上一篇《C和指针》可能对关于C和指针的有些内容没有说透 ... -
有限自动机与建模
2009-06-06 10:48 1793前言 在学校学程序设计语言的时候,能接触到的所有例子没有一个 ... -
事件和监听器
2009-06-21 22:06 1441前言 事件监听器是经 ... -
基于总线的消息服务(BBMS)的设计与实现
2009-07-25 22:19 1367前言 异步事件的通知机制在比较有规模的软件设计中必然会有涉及 ... -
JavaScript内核系列 第9章 函数式的Javascript
2010-05-13 19:20 3790第九章 函数式的Javascript 要说Ja ... -
JavaScript内核系列 第8章 面向对象的JavaScript(下)
2010-05-06 09:40 3675接上篇:JavaScript内核系列 第8章 面向对象的Jav ... -
JavaScript内核系列 第8章 面向对象的JavaScript(上)
2010-05-06 09:26 2914第八章 面向对象的 Javascript ... -
JavaScript内核系列 第7章 闭包
2010-05-04 08:48 3885第七章 闭包 闭包向来给包括JavaScript程序 ... -
JavaScript内核系列 第6章 正则表达式
2010-04-27 19:44 4060第六章 正则表达式 正则表达式是对字符串的结构 ... -
JavaScript内核系列 第5章 数组
2010-04-24 15:17 4543第五章 数组 JavaScript的数组也是一个比较 ... -
Swing小应用(Todo-List)之三
2010-04-22 20:47 2138前言 去年9月份开发的那个小工具sTodo,只是做到了能用, ... -
JavaScript内核系列 第4章 函数
2010-04-18 17:31 5098第四章 函数 函数,在C语言之类的过程式语言中 ... -
JavaScript内核系列 第3章 对象与JSON
2010-04-12 09:12 6148第三章 对象与JSON JavaScript对象与传 ... -
JavaScript内核系列 第2章 基本概念
2010-04-03 19:44 5705第二章 基本概念 ...
相关推荐
PythonWare 公司提供了免费的图像处理工具包 PIL(Python Image Library),该软件包提供了基本的图像处理功能,如改变图像大小、旋转图像、图像格式转换、色场空间转换、图像增强、直方图处理、插值和滤波等等。...
通过上述介绍可以看出,Python结合PIL库可以轻松地实现图像处理中的许多基本操作。无论是进行图像的简单处理还是作为复杂项目的一部分,PIL都为Python开发者提供了强大的支持。此外,Python还有其他更为先进的图像...
在Python的图形编程领域,Pygame是一个非常受欢迎的库,尤其在游戏开发和图像处理方面。这个名为"pygame图片属性和方法"的压缩包文件,很显然,它着重讲解了如何使用Pygame来操作和处理图像。Pygame库是基于SDL...
【Python图像处理与Pillow模块】 Python在图像处理领域广泛使用Pillow库,它是对已停止维护的Python Imaging Library(PIL)的分支和升级版本。Pillow不仅继承了PIL的功能,还修复了一些已知问题,并增加了对新特性...
### Python 图像处理库指南:Python Imaging Library (PIL) #### 一、引言 Python Imaging Library(简称PIL)是Python编程语言中一个强大的图像处理库,它为用户提供了一系列的功能来创建、修改以及转换各种格式...
Python在图形图像处理领域有着广泛的应用,这主要得益于其丰富的库支持,如PIL(Python Imaging Library)、OpenCV、matplotlib等。"python图像处理.rar"这个压缩包显然包含了一份关于如何使用Python进行图像处理的...
2. 中文与汉字支持:不同于一些只能处理英文的库,Python-ZPL2支持Unicode,这意味着它能够处理中文和其他复杂字符集,这对于在收据或标签上打印汉字非常有用。 3. 打印模板设计:用户可以定义和保存打印模板,通过...
这些函数可能会使用到C++标准库或者第三方图像处理库,如OpenCV、PIL(Python Imaging Library)或ImageMagick等。`PicManager.h`则是头文件,它定义了`PicManager`类的接口,供其他代码引用和调用。在这个头文件中...
在图片处理方面,Python MSS返回的图像数据是一个numpy数组,这使得我们可以很方便地利用numpy和PIL(Python Imaging Library)等图像处理库对截图进行进一步操作,如裁剪、缩放、旋转、颜色转换等。例如,你可以将...
Python Imaging Library (PIL) 是Python中用于图像处理的一个重要库,它提供了丰富的图像处理功能,包括读取、创建、修改和保存各种图像文件格式。PIL的中文手册是学习和理解该库的关键资源。 **第一部分:介绍** 1...
总之,这个实例展示了Python在图形图像处理领域的强大能力,以及如何通过编程实现自动化任务,提高工作效率。通过学习和实践这个实例,不仅可以提升Python编程技能,还能深入理解图像处理的原理和技术,为其他相关...
Pillow是Python中非常流行的图像处理库,它是著名的Python Imaging Library(PIL)的分支版本,提供了广泛的图像处理能力。学习Pillow可以帮助我们完成图像读取、修改、保存等一系列操作,还可以用于创建图形用户...
总之,`image_helpers`库作为一个专注于图像处理的Python库,为开发者提供了强大而便捷的工具,简化了图像处理的复杂性,让开发者能更专注于项目的创新和实现。无论你是初学者还是经验丰富的开发者,都可以尝试使用`...
通过阅读和理解这些文件,开发者可以学习到如何结合Python的图像处理库实现特定图形的生成,并可以在此基础上扩展到其他形状或效果。此外,该项目还可能涉及到图像质量优化、性能优化等方面的知识,对于提升Python...
- **Python**: 作为主要开发语言,Python提供了丰富的标准库和第三方库,如NumPy、PIL(Python Imaging Library)等,这些库可能与“image-generator”有直接或间接的关系,提供图像处理的支持。 - **开发语言**: ...
PIL(Python Imaging Library)是一款功能强大且广泛使用的Python图像处理模块,用于学习Python进行图像处理的必备开发库。PIL模块提供了广泛的图像处理功能,包括图像创建、打开、显示、保存、合成、裁剪、滤波、...