<背景>
这次分享的脚本是对图像进行增强处理,包含对图像像素的色彩增强、亮度增强、对比度增强、图像尖锐化等增强操作,主要基于PIL包的lambda和ImageEnhance模块。
使用方法和上一贴一样,本文脚本进行了多项功能的集成,一键完成所有处理,图像会即刻显示处理后的效果,并全部保存成特定名称jpeg。
下图是对处理后的图片的二维比较,为了更直观地比较,将处理项(亮度,颜色,对比度,锐度)作为横坐标,处理强度参数作为纵坐标(0,0.25,0.5,0.75,1)。当处理强度参数为1的时候,实际不对图像进行任何修改。
<效果>
原图:
处理后:
lambda增强40%(0.4)
<源码分析>
本文用到的是PIL的图像增强模块,即ImageEnhance 模块,这个模块可以快速对图像进行增强处理,包括色彩增强、亮度增强、对比度增强、图像尖锐化等等增强操作,所有操作都有相同形式的接口。通过相应类的enhance方法实现:色彩增强通过Color类的enhance方法实现;亮度增强通过Brightness类的enhance方法实现;对比度增强通过Contrast类的enhance方法实现;尖锐化通过Sharpness类的enhance方法实现。所有的操作都需要向类的构造函数传递一个Image对象作为参数,这个参数定义了增强作用的对象。同时所有的操作都返回一个新的Image对象。
如果传给enhance方法的参数是1.0,则不对原图像做任何改变,直接返回原图像的一个拷贝。
此外,lambda表达式可以(也仅限于)进行图像的亮度增强, imgbri=img.point(lambda i : i*1.4),代表对原图亮度增强40%。
irange代表图像增强参数的调整范围;
istep代表图像按照等步长增强后输出的图片张数;
factor代表图像增强强度参数;
img_enhance_color.show("Color %f" %factor)显示图像增强效果;
img_enhance_color.save("Color_%.2f.jpg" %factor) 保存增强后的图像。
<全部源码>
#start
# -*- coding: cp936 -*-
#阿瓦图像村出品,转载请注明出处
#QQ:576916092
import Image,ImageDraw
import ImageFilter,random,sys
import ImageEnhance
img = Image.open("1.jpg")
##图像处理##
#转换为RGB图像
img = img.convert("RGB")
#PIL图像增强lambda
imgbri=img.point(lambda i : i*1.4) #对每一个像素点进行增强
imgbri.save("1bri.jpg")
imgbri.show()
#PIL图像增强ImageEnhance
istep=4
irange=4.0
imgenhancer_Color=ImageEnhance.Color(img)
for i in range(istep):
factor=i/irange
img_enhance_color=imgenhancer_Color.enhance(factor)
img_enhance_color.show("Color %f" %factor)
img_enhance_color.save("Color_%.2f.jpg" %factor)
imgenhancer_Brightness=ImageEnhance.Brightness(img)
for i in range(istep):
factor=i/irange
img_enhance_Brightness=imgenhancer_Brightness.enhance(factor)
img_enhance_Brightness.show("Brightness %f" %factor)
img_enhance_Brightness.save("Brightness_%.2f.jpg" %factor)
imgenhancer_Contrast=ImageEnhance.Contrast(img)
for i in range(istep):
factor=i/irange
img_enhance_Contrast=imgenhancer_Contrast.enhance(factor)
img_enhance_Contrast.show("Contrast %f" %factor)
img_enhance_Contrast.save("Contrast_%.2f.jpg" %factor)
imgenhancer_Sharpness=ImageEnhance.Sharpness(img)
for i in range(istep):
factor=i/irange
img_enhance_Sharpness=imgenhancer_Sharpness.enhance(factor)
img_enhance_Sharpness.show("Sharpness %f" %factor)
img_enhance_Sharpness.save("Sharpness_%.2f.jpg" %factor)
#end