• python PIL基本使用


    使用jupyter前添加配置

    %matplotlib inline
    # %matplotlib notebook
    
    • 1
    • 2

    打开文件

    从文件加载图像,使用 open() 函数,使用show()函数来显示图片。这种图片显示方式是调用操作系统自带的图片浏览器来打开图片,有些时候这种方式不太方便,因此以使用matplotlib来显示。

    from PIL import Image
    import matplotlib.pyplot as plt
    p1 = Image.open('dog1.webp')
    plt.figure("dog")
    plt.imshow(p1)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

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

    print(p1.format, p1.size, p1.mode)
    
    • 1
    WEBP (1920, 1200) RGB
    
    • 1

    文件保存

    Image 类的 save() 方法。保存文件的时候文件名变得重要了。除非你指定格式,否则这个库将会以文件名的扩展名作为格式保存。

    p1.save('dog1.png')
    
    • 1

    可以看到图片成功保存为png格式,并且可以打开。

    from PIL import Image
    import matplotlib.pyplot as plt
    p2 = Image.open('dog1.png')
    plt.figure("dog1")
    plt.imshow(p1)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    创建 JPEG 缩略图并且保存

    使用thumbnail函数裁剪图片(注意,函数参数是一个(x,y)尺寸的元组)

    size = (128, 80)
    p1.thumbnail(size)
    p1.save('dog1.jpeg')
    
    • 1
    • 2
    • 3

    打开看一下:

    from PIL import Image
    import matplotlib.pyplot as plt
    p3 = Image.open('dog1.jpeg')
    plt.figure("dog1")
    plt.imshow(p3)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    print(p1.format, p1.size, p1.mode)
    
    • 1
    WEBP (128, 80) RGB
    
    • 1

    模式转化

    pic_mode = p1.convert('模式')

    图片有很多模式,支持以下标准模式

    模式解释
    11位像素,黑白,每字节存储一个像素
    L8位像素,黑白
    P8位像素,使用调色板映射到任何其他模式
    RGB3x8位像素,真彩
    RGBA4x8位像素,带透明蒙版的真彩
    CMYK4x8位像素,分色
    YCbCr3x8位像素,彩色视频格式
    LAB3x8位像素,L* a* b颜色空间
    HSV3x8位像素,色相,饱和度,值颜色空间
    T32位有符号整数像素
    F32位浮点像素

    Pillow还提供了一些额外模式的有限支持,包括:

    • LA (L with alpha)
    • PA (P with alpha)
    • RGBX (true color with padding)
    • RGBa (true color with premultiplied alpha)
    • La (L with premultiplied alpha)
    • I;16 (16-bit unsigned integer pixels)
    • I;16L (16-bit little endian unsigned integer pixels)
    • I;16B (16-bit big endian unsigned integer pixels)
    • I;16N (16-bit native endian unsigned integer pixels)
    • BGR;15 (15-bit reversed true colour)
    • BGR;16 (16-bit reversed true colour)
    • BGR;24 (24-bit reversed true colour)
    • BGR;32 (32-bit reversed true colour)
    from PIL import Image
    import matplotlib.pyplot as plt
    p1 = Image.open('dog1.webp')
    plt.figure("dog")
    plt.imshow(p1)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6


    在这里插入图片描述

    plt.figure("dog")
    pic_mode = p1.convert('1')
    plt.imshow(pic_mode)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    plt.figure("dog")
    pic_mode = p1.convert('L')
    plt.imshow(pic_mode)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    plt.figure("dog")
    pic_mode = p1.convert('P')
    plt.imshow(pic_mode)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4


    在这里插入图片描述

    plt.figure("dog")
    pic_mode = p1.convert('RGBA')
    plt.imshow(pic_mode)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4


    在这里插入图片描述

    plt.figure("dog")
    pic_mode = p1.convert('CMYK')
    plt.imshow(pic_mode)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4


    在这里插入图片描述

    plt.figure("dog")
    pic_mode = p1.convert('HSV')
    plt.imshow(pic_mode)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    plt.figure("dog")
    pic_mode = p1.convert('LA')
    plt.imshow(pic_mode)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4


    在这里插入图片描述

    plt.figure("dog")
    pic_mode = p1.convert('F')
    plt.imshow(pic_mode)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    从文件中读取图片

    fp = open("dog2.png", "rb")
    im = Image.open(fp)
    plt.imshow(im)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    图片大小调整

    p1.size
    
    • 1
    (1920, 1200)
    
    • 1
    p1 = Image.open('dog2.png')
    size = (p1.size[0]//5,p1.size[1]//5)
    p1.thumbnail(size)
    plt.imshow(p1)
    plt.show()
    print(p1.size)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    (165, 200)
    
    • 1
    p1 = Image.open('dog2.png')
    size = (p1.size[0]*3,p1.size[1]*3)
    p1.thumbnail(size)
    plt.imshow(p1)
    plt.show()
    print(p1.size)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6


    在这里插入图片描述

    (825, 1000)
    
    • 1

    裁剪图片

    p1 = Image.open('dog2.png')
    print(p1.size)
    
    • 1
    • 2
    (825, 1000)
    
    • 1
    cut = p1.crop(box=(200, 100,600, 500))    # 左、上、右、下
    plt.imshow(cut)
    plt.show()
    print(cut.size)
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    (400, 400)
    
    • 1

    旋转图片

    ro = Image.open('dog2.png')
    ro = ro.rotate(45)    # 逆时针
    plt.imshow(ro)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4


    在这里插入图片描述

    还有transpose()
    参数有Transpose.FLIP_LEFT_RIGHTTranspose.FLIP_TOP_BOcodeOMTranspose.ROTATE_度数

    from PIL.Image import Transpose
    ro = Image.open('dog2.png')
    ro = ro.transpose(Transpose.ROTATE_90) 
    plt.imshow(ro)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5


    在这里插入图片描述

    使用图像滤镜

    ImageFilter是PIL的滤镜模块,通过这些预定义的滤镜,可以方便的对图片进行一些过滤操作,从而去掉图片中的噪音(部分的消除),这样可以降低将来处理的复杂度(如模式识别等)。

    ImageFilter.BLUR           模糊滤镜
    ImageFilter.CONTOUR           轮廓
    ImageFilter.EDGE_ENHANCE       边界加强
    ImageFilter.EDGE_ENHANCE_MORE     边界加强(阀值更大)
    ImageFilter.EMBOSS                 浮雕滤镜
    ImageFilter.FIND_EDGES         边界滤镜
    ImageFilter.SMOOTH           平滑滤镜
    ImageFilter.SMOOTH_MORE        平滑滤镜(阀值更大)
    ImageFilter.SHARPEN              锐化滤镜
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    from PIL import ImageFilter
    p1 = Image.open('dog2.png')
    p1 = p1.filter(ImageFilter.EMBOSS)
    plt.imshow(p1)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

  • 相关阅读:
    运动耳机选择哪种好用、市面上最受欢迎的运动耳机推荐
    <三>使用类模板实现STL Vector
    【计算机网络】——前言计算机网络发展的历程概述
    Mysql 45讲学习笔记(三十七)内部临时表
    L2-005 集合相似度
    小程序和页面生命周期详解
    CesiumJS【Basic】- #024A mp4/mov 转 webm
    Redis集群方式
    Nginx负载均衡机制及常见问题
    基于蒙特卡诺的风场景模型出力(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/weixin_43788986/article/details/126431240