安装
1 | pip install Pillow |
卸载
1 | pip uninstall -y Pillow |
常用方法
打开与保存
1 | from PIL import Image |
Pillow 在保存图像时,会根据文件名的后缀自动选择编码格式。
Pillow 支持多种图像格式(如 PNG、JPEG、BMP、GIF 等),并且会根据文件扩展名自动推断并应用相应的编码器。
加载二进制
1 | import PIL.Image |
显示图像
1 | # 显示图像 |
获取图像信息
1 | # 获取图像尺寸 |
剪裁图像
1 | # 定义裁剪区域 (左, 上, 右, 下) |
调整大小
1 | # 调整图像大小 |
图片旋转
旋转是按中心旋转的。
旋转的方向是逆时针。
expand
expand=True
:旋转图像时自动扩展图像的尺寸,确保旋转后的图像不会被裁剪。expand=False
(默认值):旋转图像时不会扩展图像的尺寸,旋转后的图像可能会被裁剪。
示例
1 | img = img.rotate(90, expand=True) |
正时针旋转90度
1 | img = img.rotate(-90, expand=True) |
因为
1 | -90 % 360 = 270 |
翻转图像
1 | # 左右翻转 |
绘制图形
1 | from PIL import ImageDraw |
色值的方式
1 | # 使用字符串颜色名称 |
绘制中文
Pillow默认就支持中文,而OpenCV是不支持的。
1 | from PIL import Image, ImageDraw, ImageFont |
其他方法
图像滤镜
1 | from PIL import ImageFilter |
图像转换
1 | # 将图像转换为灰度图 |
图像合成
1 | # 打开另一张图像 |
图像分割和合并通道
1 | # 分离图像的 RGB 通道 |
应用点操作
1 | # 反转图像颜色 |
创建新图像
1 | # 创建一个新的空白图像 |
处理像素
1 | # 获取单个像素的值 |
Pillow和OpenCV
Pillow使用起来比较便捷,但是性能上不及OpenCV。
体积上Pillow只有5.8M,而OpenCV71.8M+NumPy51.1M总和将近123M。
Pillow侧重于基本的图像处理操作,如图像格式转换、裁剪、缩放、旋转、颜色模式转换等。
OpenCV是用C++编写的,并且经过了高度优化,因此在处理速度上通常比Pillow快得多。
OpenCV在内部使用NumPy数组来表示图像数据,这使得数据处理更加高效,特别是在与其他科学计算库(如NumPy和SciPy)结合使用时。
所以
在做简单的图片处理可以使用Pillow。
如果项目已经有OpenCV的前提下,还是使用OpenCV会更好点,Pillow能实现的OpenCV都能实现。
加载二进制
Pillow
1 | import PIL.Image |
OpenCV
1 | import cv2 |
获取宽高
Pillow
1 | width, height = img.size |
OpenCV
1 | height, width = img.shape[:2] |
旋转
Pillow
1 | # 逆时针90度 |
OpenCV
1 | # 逆时针90度 |
保存
Pillow
1 | img.save(full_path) |
OpenCV
1 | cv2.imencode(".jpg", img)[1].tofile(full_path) |