目录:
参考:
https://pillow.readthedocs.io/en/stable/handbook/concepts.html#concept-modes
https://blog.csdn.net/weixin_49346755/article/details/127366789
PIL全称:python image library。
Pillow是PIL的分支(进化版),你可以将两者视为同一样东西。当你用pip下载pillow时使用的是pip install pillow
,当你在python解释器中导入pillow时,使用的是import PIL
。
我们通过size属性来查看图像的大小,图片大小可以通过size
属性进行访问。
PIL共有12种模式,其中常用的L模式是1通道、8位整型灰度图像,RGB是3通道、24位整型灰度图像。注意F是1通道、32位浮点型图像,对于32位浮点型数据的理解可以参看IEEE 754标准。
我们通过PIL.Image.open(“path”)创建PIL.Image对象,查看该对象的mode属性来查看其mode。
更改mode属性即对图像的类型进行转换,如将RGB转为L,就是将彩色图片转换为了灰度图片。
使用convert方法进行mode参数的更改,convert中需要填写上述mode
中参数。
from PIL import Image
image = Image.open("/home/...")
image = image.convert("L")
PIL.Image对象中的单个元素的类型设置比较少,没办法满足你的要求?例如我们需要将Image传入Pytorch框架进行训练,由于Pytorch框架的权重是torch.float32类型,我们就需要将输入图片中每个像素点元素的值的类型设置为float32,如果你对PIL.Image的mode类型不了解,也可以将PIL.Image对象转为numpy.ndarray类型对象处理后处理再转为PIL.Image类型。
numpy的dtype类似PIL.Image.mode,能够规定numpy的数据元素类型,常见的dtype如下:
Image
和Numpy
中实现自由转换。from PIL import Image
import numpy as np
# Image 转 Numpy
image = Image.open("/home/...")
image = np.array(image)
# Numpy 转 Image
image = Image.fromarray(image)
Image中单个元素的type更改可以考虑先将其转换为Numpy,再在Numpy中指定dtype
数据类型再转为Image类型。
# 指定numpyt的dtype类型
image = Image.open("/home/...")
image = np.array(image)
image = image.astype("float32")