目录
  • 前言
  • pil库概述
  • image类解析
    • 图像的创建
    • 图像的属性
    • 图像的转换
    • 图像处理
  • 总结

    前言

    提示:以下是本篇文章正文内容

    pil库概述

    pil库支持图像存储、 显示和处理, 它能够处理几乎所有图片格式, 可以完成
    对图像的缩放、 剪裁、 叠加以及向图像添加线条、 图像和文字等操作

    pil库可以完成图像归档和图像处理两方面功能需求:
    (1)图像归档:对图像进行批处理、 生成图像预览、 图像格式转换等

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

    image类解析

    图像的创建

    在pil中, 任何一个图像文件都可以用image对象表示image类的图像读取和创建方法

    方法 描述
    image.open(filename) 根据参数加载图像文件
    image.new(mode, size, color) 根据给定参数创建一个新的图像
    image.open(stringio.stringio(buffer)) 从字符串中获取图像
    image.frombytes(mode, size, data) 根据像素点data创建图像
    image.verify() 对图像文件完整性进行检查, 返回异常
    from pil import image
    im = image.open(r"e:\pycharm\project\pictures49675.jpg")
    im.show() // 显示
    

    基本上如下图

    图像的属性

    属性 描述
    image.format 标识图像格式或来源, 如果图像不是从文件读取, 值是none
    image.mode 图像的色彩模式, “l”灰度图像、 “rgb”真彩色图像、 “cmyk”出版图像
    image.format 标识图像格式或来源, 如果图像不是从文件读取, 值是none
    image.size 图像宽度和高度, 单位是像素(px) , 返回值是二元元组(tuple)
    image.palette 调色板属性, 返回一个imagepalette类型
    from pil import image
    im = image.open(r"e:\pycharm\project\pictures49675.jpg")
    im.show()
    print(im.format,im.size)
    

    # 结果
    # jpeg (1920, 1080)

    图像的转换

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

    jpg 转换成png

    from pil import image
    im = image.open(r"e:\pycharm\project\pictures49675.jpg")
    print(im)
    im.save(r"e:\pycharm\project\pictures49675changed.png")
    im = image.open(r"e:\pycharm\project\pictures49675changed.png")
    print(im)
    im.show()
    

    # 结果
    <pil.jpegimageplugin.jpegimagefile image mode=rgb size=1920×1080 at 0x1a8de865f40>
    <pil.pngimageplugin.pngimagefile image mode=rgb size=1920×1080 at 0x1a8de8d2e80>

    gif文件图像提取。
    对一个gif格式动态文件, 提取其中各帧图像, 并保存为文件

    from pil import image
    im = image.open(r"e:\pycharm\project\pictures.gif") # 读入一个gif文件
    try:
        im.save('picframe{:02d}.png'.format(im.tell()))
        while true:
            im.seek(im.tell()+1)  # 帧的位置
            im.save('picframe{:02d}.png'.format(im.tell()))
    except:
        print("处理结束")
    

    结果

    tell()方法:返回当前帧所处位置,从0开始计算

    缩略图

    from pil import image
    im = image.open(r"e:\pycharm\project\pictures50074.jpg")
    print(im)
    im.thumbnail((128, 99))
    im.save("mm","jpeg")
    print(im)
    im.show()
    

    # 结果
    <pil.jpegimageplugin.jpegimagefile image mode=rgb size=2757×2135 at 0x238dfcd5dc0>
    <pil.jpegimageplugin.jpegimagefile image mode=rgb size=128×99 at 0x238dfcd5dc0>

    图像处理

    1.image类可以缩放和旋转图像, 其中, rotate()方法以逆时针旋转的角度值作
    为参数来旋转图像。

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

    2.image类能够对每个像素点或者一幅rgb图像的每个通道单独进行操作,split()
    方法能够将rgb图像各颜色通道提取出来, merge()方法能够将各独立通道再合成一幅新的图像。

    方法 描述
    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

    图像的颜色交换
    交换图像中的颜色, 可以通过分离rgb图片的三个颜色通道实现颜色交换

    from pil import image
    im = image.open(r"e:\pycharm\project\pictures50536.jpg") #打开文件
    r, g, b = im.split() #获得rgb通道数据
    newg = g.point(lambda i: i * 0.9) # 将g通道颜色值变为原来的0.9倍
    newb = b.point(lambda i: i < 100) # 选择b通道值低于100的像素点
    om = image.merge(im.mode, (r, newg, newb)) # 将3个通道合形成新图像
    om.save(r"e:\pycharm\project\pictures\aa.jpg") #输出图片
    om.show()
    

    原图:

    交换后

    3.图像的过滤和增强
    pil库的imagefilter类和imageenhance类提供了过滤图像和增强图像的方法, 共10种

    方法表示 描述
    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 图像的锐化效果

    轮廓效果

    from pil import image
    from pil import imagefilter
    im = image.open(r"e:\pycharm\project\pictures50558.jpg")
    om = im.filter(imagefilter.contour)
    om.save('abc.jpg')
    om.show()
    

    原图:

    修改后:

    4.imageenhance类提供了更高级的图像增强需求, 它提供调整色彩度、 亮度、 对比度、 锐化等功能

    方法 描述
    imageenhance.enhance(factor) 对选择属性的数值增强factor倍
    imageenhance.color(im) 调整图像的颜色平衡
    imageenhance.contrast(im) 调整图像的对比度
    imageenhance.brightness(im) 调整图像的亮度
    imageenhance.sharpness(im) 调整图像的锐度

    总结

    提示:这里对文章进行总结:

    到此这篇关于python 图像处理之pil库详解用法的文章就介绍到这了,更多相关python 图像处理内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!