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)
posted @ 2018-11-26 15:35  技术流选手  阅读(852)  评论(0编辑  收藏  举报