Chinaunix首页 | 论坛 | 博客
  • 博客访问: 111199
  • 博文数量: 26
  • 博客积分: 1726
  • 博客等级: 上尉
  • 技术积分: 435
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-11 14:24
文章分类

全部博文(26)

文章存档

2013年(2)

2011年(2)

2010年(15)

2008年(7)

我的朋友

分类: Python/Ruby

2010-05-30 11:55:03

颜色转换

    使用convert函数,PIL让你可以在不同的图像模式之间转换。
Example: 转换模式

im = Image.open(”lena.ppm”).convert(”L”)

    图像库支持所有图像模式到 “L”和”RGB”模式之间的转换。如果需要在其它两种模式之间转化,你可以使用一个中间图像(一般是一枚”RGB”图像)

图像增强
    PIL提供了许多方法和模块来支持图像增强。
    滤镜

    ImageFilter模块预置了一系列图像增强滤镜与filter方法一起使用。
    Example: 应用滤镜

import ImageFilter
out = im.filter(ImageFilter.DETAIL)

    象素操作
    point方法可以用来改变一个图像象素点的值。(例,图像对比操作)。在大多数情况下,一个函数需要一个参数来运行。
每个象素都可以依照以下函数进行处理:
Example: Applying point transforms

# multiply each pixel by 1.2
out = im.point(lambda i: i * 1.2)


    使用上述技术,你可以快速地在一枚图像上应用任何表达式。你也可以综合使用point和paste方法来选择性地修改一枚图像:
    Example: 处理单个颜色通道

# split the image into individual bands
source = im.split()
R, G, B = 0, 1, 2
# select regions where red is less than 100
mask = source[R].point(lambda i: i 100 and 255)
# process the green band
out = source[G].point(lambda i: i * 0.7)
# paste the processed band back, but only where red was 100
source[G].paste(out, None, mask)
# build a new multiband image
im = Image.merge(im.mode, source)

    注意创建蒙版(mask)的句法:

imout = im.point(lambda i: expression and 255)

    Python只是判断决定可输出结果的那部分逻辑表达式,返回值则是expression的结果。所以,如果上列的expression结果是false(0),python将不再查看第二个操作数,而直接返回0,否则,返回255。
    (有点像短路判断,只要运行的部份已足以决定结果了,那么剩下的部分就不看)
    增强
    更高级的图像增强,使用ImageEnhance module中的类.
    一旦由图像创建出实例,一个enhancement对象可以很快速地试验各种不同设定。
    你可以用这种方式调整图像的对比度,亮度,色平衡和锐度:
    Example: Enhancing images
import ImageEnhance
enh = ImageEnhance.Contrast(im)
enh.enhance(1.3).show(”30% more contrast”)

阅读(1226) | 评论(0) | 转发(0) |
0

上一篇:pil-handbook翻译-2

下一篇:pil-handbook翻译-4

给主人留下些什么吧!~~