zoukankan      html  css  js  c++  java
  • 快乐python 零基础也能P图 —— PIL库

     

    Python PIL 

            PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储、显示和处理,能够处理几乎所有格式的图片。

    一、PIL库简介

    1. PIL库主要有2个方面的功能:

    (1) 图像归档:对图像进行批处理、生产图像预览、图像格式转换等。

    (2) 图像处理:图像基本处理、像素处理、颜色处理等。

    2. PIL拥有多个类,此处就其中的Image类、ImageFilter类、ImageEnhance类做简单介绍。

    二、安装库函数

    pip install pillow

    注:由于本机已经安装了PIL库(安装时使用pillow),所以以更新为例,使用 -U 标签可实现更新。

    三、使用库函数Image类 —— 基本图像处理

    1. 调用Image类

    from PIL import Image

    2. Image类关于图像读取与创建

    方法

    说明

    Image.open(filename)

    加载图像文件

    Image.new(mode,size,color)

    根据给定参数创建新图像

    Image.open(StringIO.StringIO(buffer))

    从字符串中获取图像

    Image.frombytes(mode,size,color)

    根据像素点创建新图像

    Image.verify()

    对图像完整性进行检查,返回异常

    3. Image类的常用属性

    方法

    说明

    Image.format

    图像格式或来源,若图像不是从文件读取,返回None

    Image.mode

    图像的色彩模式,’L’为灰度模式,’RGB’为真彩色图像,’C(青)M(品红)Y(黄)K(黑)’为出版图像

    Image.size

    图像的宽度和高度,单位是像素(px),返回值为元组类型

    Image.palette

    调色板属性,返回ImagePalette类型

    4.Image类的序列图像操作方法

    方法

    说明

    Image.seek(frame)

    跳转并返回图像中的指定帧

    Image.tell()

    返回当前帧的序号

     

    5.Image类的图像旋转和缩放方法

    方法

    说明

    Image.resize(size)

    返回按size大小调整图像的副本

    Image.rotate(angle)

    返回按angle角度旋转图像的副本

     

    6.Image类的图像转换和保存方法

    方法

    说明

    Image.save(filename,format)

    将图像保存为filename文件名,format格式

    Image.convert(mode)

    将图像转换为mode模式

    Image.thumbnail(size)

    创建图像的缩略图,size是缩略图尺寸的元组

     Example_1:

    # -*- encoding:utf-8 -*-
    ''' 改变颜色 --- 颜色反转'''
    from PIL import Image
    nest = Image.open("D:\nest.jpg")
    r,g,b = nest.split()           #获取原图的RGB通道的颜色值
    newb = b.point(lambda i:i*1.1) #将B通道的颜色值增强
    nest1 = Image.merge(nest.mode,(b,g,r))
    nest1.thumbnail((400,254))     #创建缩略图
    nest1.save("D:\nest_2.jpg")
    

       原图与效果图对比:

    7.Image类的图像像素和通道处理方法

    方法

    说明

    Image.point(func)

    根据函数func的功能对每个元素进行运算,返回图像副本

    Image.split()

    根据GRB图像的每个颜色通道,返回图像副本

    Image.merge(mode,bands)

    合成通道,其中mode为色彩,bands为新的色彩通道

    Image.blend(im1,im2,alpha)

    将2张图片im1和im2按照公式插值后生成新图像

    公式:im1*(1.0 - alpha) + im2*alpha

     四、使用库函数ImageFilter类 —— 图像过滤

    1.调用ImageFilter类

    from PIL import ImageFilter

    2. ImageFilter类预定义图像过滤方法

    方法

    说明

    ImageFilter.BLUR

    图像的模糊效果

    ImageFilter.CONTOUR

    图像的轮廓效果

    ImageFilter.DETAIL

    图像的细节效果

    ImageFilter.EDGE_ENHANCE

    图像的边界加强效果

    ImageFilter.EDGE_ENHANCE_MORE

    图像的阈值边界加强效果

    ImageFilter.EMBOSS

    图像的浮雕效果

    ImageFilter.FIND_EDGES

    图像的边界效果

    ImageFilter.SMOOTH

    图像的平滑效果

    ImageFilter.SMOOTH_MORE

    图像的阈值平滑效果

    ImageFilter.SHARPEN

    图像的锐化效果

     Example_2:

    # -*- encoding:utf-8 -*-
    ''' 轮廓效果 --- 素描 '''
    from PIL import Image
    from PIL import ImageFilter
    square = Image.open("D:\square.jpg")
    square1 = square.filter(ImageFilter.CONTOUR)  #选择轮廓效果
    square1.save("D:\square0.jpg")
    

      原图:

    效果图:

    五、使用库函数ImageEnhance类 —— 图像增强

     1. 调用ImageEnhance类

    from PIL import ImageEnhance

    2.ImageEnhance类图像增强与滤镜方法

    方法

    说明

    ImageEnhance.enhance(factor)

    对所选属性的数值增强factor倍

    ImageEnhance.Color(im)

    调整图像的颜色平衡

    ImageEnhance.Contrast(im)

    调整图像的对比度

    ImageEnhance.Brightness(im)

    调整图像的亮度

    ImageEnhance.Sharpness(im)

    调整图像的锐度

     Example_3:

    # -*- encoding:utf-8 -*-
    ''' 亮度增强 --- 曝光 '''
    from PIL import Image
    from PIL import ImageEnhance
    gz = Image.open("D:\gz.jpg")
    gz1 = ImageEnhance.Brightness(gz)     #选择亮度
    gz1.enhance(2).save("D:\gz1.jpg")    #将亮度增强2倍后保存
    

      

    原图对比效果图:

     Example_4:

    # -*- encoding:utf-8 -*-
    ''' 制作GIF图 '''
    import imageio
    savename = "D:\my.gif"
    #准备制作的图像名称
    filenames = ["D:\3.jpg","D:\2.jpg","D:\1.jpg","D:\01.jpg","D:\02.jpg","D:\03.jpg","D:\04.jpg"]
    frames = []
    for name in filenames:
        frames.append(imageio.imread(name))
    imageio.mimsave(savename,frames,'GIF',duration=1)
    

      

     

  • 相关阅读:
    hdu 6188 Duizi and Shunzi
    区间第k大
    AtCoder Regular Contest 081 E
    hdu 6170 Two strings
    hdu 6156 Palindrome Function
    2017百度之星初赛(B)-1006-小小粉丝度度熊 hdu 6119
    AtCoder Regular Contest 080 E
    hdu 6069 Counting Divisors
    hdu 6058 Kanade's sum (多校3)
    苹果曼和树
  • 原文地址:https://www.cnblogs.com/elbow/p/10680363.html
Copyright © 2011-2022 走看看