PIL基本操作
pillow库的学习
内容代码来自一份PIL中文文档的教程,以下仅是我个人的记录
打开图像
form PIL import Image
im = Image.open('image.jpg')
# 图像来源
print(im.format)
# 图像大小
print(im.size)
# 图像模式,包括L,RGB,CMYK
print(im.mode)
显示图像
im.show()
读写图像
# 覆盖读写,比如jpg->jpeg
Image.open('in_file_path.jpg').save('out_file_path.jpeg')
图像部分区域的复制粘贴
box = (100,100,400,400)
region = im.crop(box)
region = region.transpose(Image.ROTATE_180)
im.paste(region,box)
图像的复制粘贴实例
def roll(image, delta):
xsize, ysize = image.size
# 控制delta的大小
delta = delta % xsize
if delta == 0: return image
# 复制左边的矩形,宽delta,高ysize
part1 = image.crop((0, 0, delta, ysize))
# 复制右边的矩形,宽xsize-delta,高ysize
part2 = image.crop((delta, 0, xsize, ysize))
# 把右边的矩形粘贴到左边矩形区域
image.paste(part2, (0, 0, xsize-delta, ysize))
# 把左边的矩形粘贴到右边矩形区域
image.paste(part1, (xsize-delta, 0, xsize, ysize))
return image
颜色通道转换,RGB->BGR
r,g,b = im.split()
im = Image.merge('RGB',(b,g,r))
几何变换
out = im.resize((128,128))
# 逆时针旋转45度
out = im.rotate(45)
# 左右对称变换
out = im.transpose(Image.FLIP_LEFT_RIGHT)
# 上下对称变化
out = im.transpose(Image.FLIP_TOP_BOTTOM)
# 旋转90度,180度,270度
out = im.transpose(Image.ROTATE_90)
out = im.transpose(Image.ROTATE_180)
out = im.transpose(Image.ROTATE_270)
颜色变换,RGB到灰度图
out = im.convert('L')
过滤器
out = im.filter(ImageFilter.DETAIL)
像素点操作
out = im.point(lambda i:i*1.2)
图像增强
enh = ImageEnhance.Contrast(im)
enh.enhance(1.3).show('30% more contrast')
numpy和PIL的转换
# 转换成numpy,RGB格式得到(h,w,c),gray模式得到(h,w)
arr = np.asarray(im)
# numpy转换成PIL
out = Image.fromarray(arr)