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()

  • 通过定义一个 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」!

---------------------

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

Python 学习笔记之—— PIL 库的更多相关文章

  1. Python学习笔记之——requests库

    requests库一个优雅而简单的用于Python的HTTP库,可以极大的简化我们发送http请求及获取响应的代码. requests是python的第三方库,所以使用之前需要先安装. 1.安装之后就 ...

  2. python学习笔记(自定义库文件路径)

    博主最近在弄接口自动化.主要是基于python自带的unittest框架.包括 Pubilc模块定义所有接口. Main模块根据业务需求重新封装接口便于测试. config文件导入测试业务的固定参数. ...

  3. 【Python学习笔记】Pandas库之DataFrame

    1 简介 DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表. 或许说它可能有点像matlab的矩阵,但是matlab的矩阵只能放数值型值(当然matla ...

  4. 吴裕雄--天生自然python学习笔记:beautifulsoup库的使用

    Beautiful Soup 库简介 Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简 ...

  5. python学习笔记(5)-time库的使用

    import time 一.时间获取函数 time(), ctime(),gmtime() >>> import time >>> time.time() 1524 ...

  6. Python 学习笔记之 Numpy 库——文件操作

    1. 读写 txt 文件 a = list(range(0, 100)) a = np.array(a) # a.dtype = np.int64 np.savetxt("filename. ...

  7. Python 学习笔记之 Numpy 库——数组基础

    1. 初识数组 import numpy as np a = np.arange(15) a = a.reshape(3, 5) print(a.ndim, a.shape, a.dtype, a.s ...

  8. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  9. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

随机推荐

  1. GYM 101550 G.Game Rank(模拟)

    The gaming company Sandstorm is developing an online two player game. You have been asked to impleme ...

  2. .NET 小程序 wx.getUserInfo(OBJECT) 解密 encryptedData 来获取UnionId

    在小程序中通过 wx.getUserInfo 获取用户信息,而UnionId 只有关主了公众号才会返回,不关注公众号想获取UnionId则需要我们从返回的 encryptedData 中解码从而获取U ...

  3. JDBC jar包

    密码qiij https://pan.baidu.com/share/init?surl=oBfMwQ6rd9t6VNjIluF1qw

  4. 不使用C++ 11的整数转字符串

    蓝桥杯不支持C++11,那么to_string方法就用不了了.C语言提供了一种方法. 首先需要头文件 #include <sstream> 然后进行下面的操作就可以,缺点就是比较耗时. # ...

  5. 单机安装hadoop+hive+presto

    系统环境 在个人笔记本上使用virtualbox虚拟机 os:centos -7.x86-64.everything.1611  ,内核 3.10.0-514.el7.x86_64 注:同样可以使用r ...

  6. Lintcode算法

    题目: 给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数. 样例 给出 [1, 20, 23, 4, 8],返回组合最大的整数应为8423201. 思路:直接交换两个数,然后判断交换之后的 ...

  7. lvs集群实现lvs-dr模型和lvs-nat模型

    ipvsadm ipvsadm命令是lvs集群在应用层的管理工具,我们可以通过此ipvsadm来管理lvs的配置,其实现了集群服务管理:增.删.改,集群服务的RS管理:增.删.改以及查看集群状态. 管 ...

  8. JS数组push一个对象

    这个是正确的数据添加对象 var dypieArr = []; var dyArr = []; var arrStr = ''; for(var i = 0; i < dataStreet.le ...

  9. 修改二维码生成插件jquery.qrcode.js支持加入自定义LOGO

    1,将jquery.qrcode.min.js和jquery添加到您的网页中 <script src="jquery.min.js"></script> & ...

  10. Angular : IOC的方式:依赖注入

    依赖注入 @Component, @Injectable 可以允许别的声明在providers里面的Service等注入到被这两个装饰器装饰的类中 Service等可以被声明在app-module.t ...