zoukankan      html  css  js  c++  java
  • PIL库的总结与简单应用

    一.PIL库的简单介绍

    1、PIL (Python Imaging Library)是 Python 中最常用的图像处理库,PIL支持图像存储、显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放、裁剪、叠加以及图像添加线条、图像和文字等操作。

    2、PIL库主要可以实现图像归档和图像处理两方面功能需求。

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

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

    3、根据功能的不同,PIL库共包括21个与图片相关的类,这些类可以被看做是子库或PIL库中的模块,Image是最常用的类(其他的类就不在此一一列出)

    二.Image类的详细解析

    1、文件的读取和创建   

              方法                描述 
    Image.open(filename) 根据参数加载图片文件
    Image.new(mode,size,color) 根据给定参数创建一个新的图像
    Image.frombytes(mode,size,date) 根据像素点date创建图像
    Image.open(StringIO,StringIO(buffer)) 从字符串中获取图像
    Image.verify() 对图像文件完整性进行检查,返回异常

           

       

    eg.加载一个图像文件(最简单的形式)

    2、Image类的常用属性

    属性 描述
    Image.format 识别图像格式或来源,如果图像不是从文件读取,值为None
    Image.mode 图像的色彩模式,“L”为灰色图像、“RGB”为真彩色图像、“CMYK”为出版图像
    Image.size 图像的宽度和高度,单位是像素(px),返回值是二元元组(tuple)
    Image.palette  调色板属性,返回一个ImagePalette类型

     

     

     

     

     

     

     

    eg.查看图像文件的属性

     

     

    3、Image还能读取序列类图像文件,包括  gif /   fli  /  flc  /  tiff 等文件格式。open()方法打开一个图像时自动加载序列中的第一帧,使用seek()和tell()方法在不同帧之间的移动:

    //Image类的序列图像操作处理

    方法 描述
    Image.seek(frame) 跳转并返回图像中的指定帧
    Image.tell() 返回当前帧的序列

     

     

     

    eg.对一个GIF格式动态文件,提取其中个帧图像,并保存为文件:

     

    4、Image类的图像转换和保存方法

    方法 描述
    Image.save(filenma,format) 将图像保存为filename文件名,format是图片格式
    Image.convert(mode) 使用不同的参数,转换图像为新的模式
    Image.thumbnail(size) 创建图像的缩略图,size是缩略图尺寸的二元元组

     

     

     

     

     

     

    #open()和save()的参数是:文件名filename和图像格式formt

    eg.

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

    方法 描述
    Image.resize(size) 按size大小调整图像,生成副本
    Image.rotate(angle) 按angle角度旋转图像,生成副本

     

     

     

     

     

    eg.图像文件的缩小

    代码示意如下:

     

    1 from PIL import Image
    2 im=Image.open("D:\Python\小宠物.jpg")#读取图像
    3 print(im.format,im.size,im.mode)#读取图像文件的属性
    4 im.show()
    5 im_resized = im.resize((500, 400))    #原图像缩放为500x400 
    6 im_resized.show() 

     

    效果图:

     

     

    6、Image类能够对每个想像素点或者一幅RGB图像的每个通道单独进行操作。split()方法能够将RGB图像通道提取出来,merge()方法能够将各独立通道再合成一幅新的图像。

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

    方法 描述
    Image.point(func) 根据函数func的功能对每个元素进行运算,返回图像副本
    Image.split() 提取RGB图像的每个颜色通道,返回图像副本
    Image.merge(mode,bands) 合并通道,其中mode表示色彩,bands表示新的色彩通道
    Image.blend(im1,im2,alpha)

    将两幅图片im1和im2按照如下公式插值后生成新的图像:

    im1*(1.0-alpha)+im2*alpha

    三、图像的过滤和增强

    PIL库的Imagefilter类和ImageEnhance类提供过滤图像和增强图像的方法。

    方法表示 描述
    Imagefilter.BLUR 图像的模糊效果
    Imagefilter.CONTOUR 图像的轮廓效果
    Imagefilter.DETAIL 图像的细节效果
    Imagefilter.EDGE_ENHANCE 图像的边界加强效果
    Imagefilter.EDGE_ENHANCE_MODE 图像的阈值边界加强效果
    Imagefilter.EMBOSS 图像的浮雕效果
    Imagefilter.FIND_EDGES 图像的边界效果
    Imagefilter.SMOOTH 图像的平滑效果
    Imagefilter.SMOOTH_MORE 图像的阈值平滑效果
    Imagefilter.SHARPEN 图像的锐化效果

    #利用Image类的filter()方法可以使用ImageFilter类,使用方法如下:

    Image.filter(ImageFilter.function)

    eg.图像轮廓的获取:

     

    from PIL import Image
    from PIL import ImageFilter
    im=Image.open("D:\Python\小宠物.jpg")#读取图像
    om=im.filter(ImageFilter.CONTOUR)
    om.save("D:\Python\小宠物.jpg")
    im.show()

     

    效果图:

     

     

     

    7、ImagEnhance类提供了更高级的图像增强功能,如调整色彩度、亮度、对比度、锐化等。

    ImagEnhance类的图像增强和滤镜方法:

    方法 描述
    ImagEnhance.enhance(factor) 对选择属性的数值增强factor倍
    ImagEnhance.Color(im) 调整图像的颜色平衡
    ImagEnhance.Contrast(im) 调整图像的对比度
    ImagEnhance.Brightness(im) 调整图像的亮度
    ImagEnhance.Sharpness(im) 调整图像的锐度

    eg.图像对比度增强效果(增强图像的对比度为初始的10倍)

    from PIL import Image
    from PIL import ImageEnhance
    im=Image.open("D:\Python\小宠物.jpg")#读取图像
    om=ImageEnhance.Contrast(im)
    om.enhance(10).save('D:\Python\小宠物.jpg')
    im.show()

    效果图:

     

     

     四、jif图像的制作

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    北京Uber优步司机奖励政策(3月3日)
    ubuntu安装phpstorm
    ubuntu安装typora
    PHP定时任务Crontab结合CLI模式详解
    mysql创建用户,并授予权限
    ubuntu下使用crontab定时器
    Ubuntu 查看当前目录使用的总空间大小
    ubuntu安装ruby,安装sass,安装compass
    open_basedir restriction in effect,解决php引入文件权限问题 lnmp
    canvas 画线
  • 原文地址:https://www.cnblogs.com/yyp-20190107/p/10682850.html
Copyright © 2011-2022 走看看