分类: 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”)