zoukankan      html  css  js  c++  java
  • Python 学习笔记之—— PIL 库

    PIL,全称 Python Imaging Library,是 Python 平台一个功能非常强大而且简单易用的图像处理库。但是,由于 PIL 仅支持到Python 2.7,加上年久失修,于是一群志愿者在 PIL 的基础上创建了兼容 Python 3 的版本,名字叫 Pillow ,我们可以通过安装 Pillow 来使用 PIL。

    1. pip 安装 pillow

    在 Ubuntu 下通过一个简单的命令sudo pip3 install pillow即可成功安装库。

    2. 打开、保存、显示图片

    from PIL import Image
    
    image = Image.open('2092.jpg')
    image.show()
    image.save('1.jpg')
    print(image.mode, image.size, image.format)
    # RGB (481, 321) JPEG
    • mode 属性为图片的模式,RGB 代表彩色图像,L 代表光照图像也即灰度图像等
    • size 属性为图片的大小(宽度,长度)
    • format 属性为图片的格式,如常见的 PNG、JPEG 等

    3. 转换图片模式

    image.show()
    grey_image = image.convert('L')
    grey_image.show()
    

    彩色图像

    灰度图像

    • 任何支持的图片模式都可以直接转为彩色模式或者灰度模式,但是,若是想转化为其他模式,则需要借助一个中间模式(通常是彩色)来进行过转化。

    4. 通道分离合并

    r, g, b = image.split()
    im = Image.merge('RGB', (b, g, r))
    • 彩色图像可以分离出 R、G、B 通道,但若是灰度图像,则返回灰度图像本身。然后,可以将 R、G、B 通道按照一定的顺序再合并成彩色图像。

    5. 图片裁剪、旋转和改变大小

    box = (100, 100, 300, 300)
    region = image.crop(box)
    region = region.transpose(Image.ROTATE_180)
    image.paste(region, box)
    image.show()
    

    局部旋转 180 度

    • 通过定义一个 4 元组,依次为左上角 X 坐标、Y 坐标,右下角 X 坐标、Y 坐标,可以対原图片的某一区域进行裁剪,然后进行一定处理后可以在原位置粘贴回去。
    im = image.resize((300, 300))
    im = image.rotate(45)  # 逆时针旋转 45 度
    im = image.transpose(Image.FLIP_LEFT_RIGHT) # 左右翻转
    im = im.transpose(Image.FLIP_TOP_BOTTOM)# 上下翻转
    

    6. 像素值操作

    out = image.point(lambda i: i * 1.2) # 对每个像素值乘以 1.2
    
    source = image.split()
    out = source[0].point(lambda i: i > 128 and 255) # 对 R 通道进行二值化
    

    二值化

    • i > 128 and 255,当 i <= 128 时,返回 False 也即 0,;反之返回 255 。

    7. 和 Numpy 数组之间的转化

    array = np.array(image)
    print(array.shape) #(321, 481, 3)
    out = Image.fromarray(array)
    

    获取更多精彩,请关注「seniusen」!
    seniusen

    --------------------- 本文来自 永森 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/seniusen/article/details/82841472?utm_source=copy 

  • 相关阅读:
    hbase 2.0.2 分布式安装配置/jar包替换
    hive character '' not supported here
    request.getSession().getServletContext().getRealPath()的一些坑
    hive 自定义函数
    hive 导出数据的几种方式
    hive 分区表与数据产生关联的三种方式
    hive 日志配置/表头配置
    hive 3.1.0 安装配置
    zookeeper 客户端操作
    linux 循环读取文件的每一行
  • 原文地址:https://www.cnblogs.com/seniusen/p/9700376.html
Copyright © 2011-2022 走看看