1 使用PIL的Image处理图像时,需要导入包:
from PIL import Image
2 图片读取
img = Image.open("D:\\test\\img\\test01.jpg")
Image.open(fp, mode='r'):参数mode不是图片的mode,而是读写的方式,必须是‘r’。该函数只是打开图片,并不读入内存。读入内存时Image会调用Image.load()方法。
# 从路径打开
img = Image.open('01.jpg')
## 从文件流读取
f = open('01.jpg', 'rb')
img = Image.open(f) # 不要使用 f.close() 关闭文件,否则会报错, Image会自己调用关闭
### 从二进制流(BytesIO)读取
import os
with open('01.jpg', 'rb') as f:
img = Image.open(io.BytesIO(f.read()))
【注意】:平时在读取文件或者图片的时候,路径最后使用 “\\” 来作为分隔,避免出现不必要的错误!
3 获取图片通道数:
img.mode # RGB(三通道)或者L(单通道灰度)
4 获取图片尺寸:
img.size
5 显示图片:
Image.show(title=None, command=None)
如果是masOS、Window系统,会生成一个临时BMP文件在系统临时文件夹内,同时调用系统BMP图查看器打开。如果是Unix平台,会生成临时PPM文件,并调用相应的查看软件。
6 保存图片
Image.save(fp, format=None, **params)
如果format未指定,则根据fp保存的文件后缀确定保存的格式。params 根据保存格式不同有所不同,具体看官方文档:Pillow 格式支持
7 单通道和三通道的转换:(假定img是单通道,imgs是三通道)
- 单通道->三通道:
imgs = [img,img,img]
imgs = Image.merge("RGB",imgs) #合并三通道
- 三通道->单通道
img = imgs.convert('L') # 转换成灰度
r,g,b = imgs.split() # 分离三通道
参考:
- https://blog.csdn.net/aaon22357/article/details/82946605
- https://blog.csdn.net/Li_qf/article/details/84925027