image类
创建一个image类
from PIL import Image
im = Image.open("hopper.ppm")
查看类的相关信息
print(im.format, im.size, im.mode) # format标识了图像的来源,如果不是读取文件获得的图像返回None
显示图像
im.show()
读写图像
image.open(infile).save(outfile,"JPEG") # open()函数会只能分析文件的格式,当打开图片的时候并没有立即载入图片,而只是载入了相关信息,所以访问会很快;save的第二个参数可以指定保存图片的格式
剪切,粘贴,合并
复制一个矩形选区
box = (100, 100, 400, 400)
region = im.crop(box)
粘贴矩形选区到原图
region = region.transpose(Image.ROTATE_180)
im.paste(region, box)
分离合并颜色通道
r, g, b = im.split()
im = Image.merge("RGB", (b, g, r))
几何变换
out = im.resize((128, 128))
out = im.rotate(45) # degrees counter-clockwise
# 还可以使用transpose方法
out = im.transpose(Image.FLIP_LEFT_RIGHT)
out = im.transpose(Image.FLIP_TOP_BOTTOM)
out = im.transpose(Image.ROTATE_90)
out = im.transpose(Image.ROTATE_180)
out = im.transpose(Image.ROTATE_270)
颜色模式转换
im = Image.open("lena.ppm").convert("L")
过滤器
from PIL import ImageFilter
out = im.filter(ImageFilter.DETAIL)
点操作
选择点
# multiply each pixel by 1.2
out = im.point(lambda i: i * 1.2)
结合通道
# 将图片分成不同的通道
source = im.split()
R, G, B = 0, 1, 2
# 选择红色小于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)
增强
from PIL import ImageEnhance
enh = ImageEnhance.Contrast(im)
enh.enhance(1.3).show("30% more contrast")