使用Python图片处理包pillow

    “冬至至后日初长,远在剑南思洛阳”,杜甫的《至后》中的这句就是为冬至而写的吧,今日冬至,吃饺子了吗?

    最近做遥感影像切片,用到了pillow包来处理图片,今天就简单梳理一下相关的内容,分享给大家也备日后查阅。

    导入相关包,打开影像并打印相关信息,查看图片:

from PIL import Image
from PIL import ImageFilter
import numpy as np
im = Image.open("E:/1208/L24868/L6922.tif")

print(im.format, im.size, im.mode)

im.show()

    图片和矩阵的相互转化: 

data = im.getdata()
data = np.matrix(data)

new_im = Image.fromarray(data)

     修改图像的像素个数:

size = (128, 128)
im.thumbnail(size)

    或者: 

out = im.resize((128, 128),Image.NEAREST)
# 第二个参数:
# Image.NEAREST :最近邻
# Image.BILINEAR:双线性
# Image.BICUBIC :三次样条插值
# Image.ANTIALIAS:高质量

    图片的复制与粘贴:(经测试这个功能的速度还不错) 

box = im.copy() #直接复制图像

posi = (0, 0, 100, 200)
box = im.crop(posi) #复制具体区域
im.paste(box, (0, 0, 100, 200)) #将box粘贴到im中

    波段拆分与融合,返回的数据类型都是image:

r, g, b = im.split()
im = Image.merge("RGB", (b, g, r))

    最后是一些图像的旋转、增强等操作:

# 顺时针角度表示
out = im.rotate(45) 
# 图像的增强
out = im.filter(ImageFilter.DETAIL) 
# multiply each pixel by 1.2
out = im.point(lambda i: i * 1.2)
# 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)
# 如果expression为假则返回expression的值为0(因为and语句已经可以得出结果了),否则返回255。(mask参数用法:当为0时,保留当前值,255为使用paste进来的值,
# 中间则用于transparency效果)
imout = im.point(lambda i: expression and 255)
原创文章 19 获赞 34 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38141453/article/details/85201907
今日推荐