python的pillow库

PIL的命令行安装

>>>pip install pillow

打开与显示图像

pil_im0=Image.open('00.jpg')#读取一幅图像,返回值是一个PIL图像对象
pil_im1=Image.open('00.jpg').convert('L')#读取一幅图像,转换成灰度图像
pil_im1.show()#显示图像

支持模式与“L”和“RGB”模式之间进行转换。要在其他模式之间进行转换,您可能必须使用中间图像(通常是“RGB”图像)。

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

format :标识了图像来源。如果图像不是从文件读取它的值就是None。
size:二元tuple,包含width和height(宽度和高度,单位都是px)。
mode: 定义了图像bands的数量和名称,以及像素类型和深度。常见的modes 有 “L” (luminance) 表示灰度图像, “RGB” 表示真彩色图像, and “CMYK” 表示出版图像。
如果文件打开错误,返回 IOError 错误。

读写图像

  1. 转换图像格式
infile="D:\\001_A_2.jpg"
f, e = os.path.splitext(infile)
outfile = f + ".png"
Image.open(infile).save(outfile)#outfile为D:\\001_A_2.png
  1. 创建缩略图
infile="D:\\001_A_2.jpg"
im = Image.open(infile)
im.thumbnail((44,44))#(44,44)是尺寸
im.save("D:\\001_A_1.jpg")

剪切,粘贴,合并图像

1.从图像中复制出一个矩形选区

im=Image.open('D:\\001_A_2.jpg')
region = im.crop((100, 100, 400, 400))#四元组坐标左上右下,单位是px

2.粘贴到原图

region = region.transpose(Image.ROTATE_180)#使矩形选区和原图的颜色模式一致
im1.paste(region, (200, 200, 500, 500))

分离和合并颜色通道

对于单波段图像,split()返回图像本身。要使用单独的颜色带,可能需要首先将图像转换为“RGB”。

r, g, b = im.split()#分离
im = Image.merge("RGB", (b, g, r))#合并

几何变换

1.简单的几何变换

out = im.resize((128, 128))#新的大小
out = im.rotate(45) # 逆时针的角度

2.特殊的旋转图像

out0 = im.transpose(Image.FLIP_LEFT_RIGHT)
out1 = im.transpose(Image.FLIP_TOP_BOTTOM)
out2 = im.transpose(Image.ROTATE_90)
out3 = im.transpose(Image.ROTATE_180)
out4 = im.transpose(Image.ROTATE_270)

颜色增强

1.滤波器

from PIL import ImageFilter
#ImageFilter模块包含许多预先定义的增强过滤器
out0 = im.filter(ImageFilter.BLUE)#模糊滤波
out1 = im.filter(ImageFilter.CONTOUR)#轮廓滤波
out2 = im.filter(ImageFilter.DETAIL)#细节滤波
out3 = im.filter(ImageFilter.EDGE_ENHANCE)#细节滤波
out4 = im.filter(ImageFilter.EDGE_ENHANCE_MORE)#边界增强滤波(程度更深)
out5 = im.filter(ImageFilter.SHARPEN)#锐化滤波
out6 = im.filter(ImageFilter.GaussianBlur(radius=2))
# radius指定平滑半径,也就是模糊的程度。
out7 = im.filter(ImageFilter.SMOOTH_MORE)#平滑滤波(程度更深)
out8 = im.filter(ImageFilter.EMBOSS)#浮雕滤波
out9 = im.filter(ImageFilter.ModeFilter(size=5))
# size指定核大小(width, height);

2.点操作
对图像的像素进行点对点操作

out = im.point(lambda i: i * 1.2)#每个像素点乘二
source = im.split()#分离颜色通道
R, G, B = 0, 1, 2
mask = source[R].point(lambda i: i < 100 and 255)#选择红色小于100的区域
out = source[G].point(lambda i: i * 0.7)
#把绿色道的点的色素值调低百分之三十
source[G].paste(out, None, mask)#红色<100的店,绿色降了30%
im = Image.merge(im.mode, source)#合并通道

用于创建掩膜:

imout = im.point(lambda i: expression and 255)

后面的and 255,如果表达式为假,就返回0,只有为真的时候才返回255

3.增强
使用ImageEnhance模块中的类,调整对比度、亮度、色彩平衡和锐度。

en=ImageEnhance.Brightness(image)#图片的亮度增加
en=ImageEnhance.Color(image)#图片的色度增强
en=ImageEnhance.Contrast(image)#图片的对比度增强
en=ImageEnhance.Sharpness(image)#图片的锐度的增强
en_end=en.enhance(100)
en_end.show()

更多地方读取图像

im = Image.open("lena.ppm")

1.从文件读取

fp = open("lena.ppm", "rb")
im = Image.open(fp)

2.从 string 读取

import StringIO
im = Image.open(StringIO.StringIO(buffer))

3.从压缩包读取

from PIL import TarIO
fp = TarIO.TarIO("Imaging.tar", "Imaging/test/lena.ppm")
im = Image.open(fp)

pillow官方文档中文版

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值