PIL和pillow,opencv库的区别
一、PIL
分不清PIL
和Pillow
,于是简单整理一下二者区别;
PIL
全称是:Python Imaging Library。
PIL
是一个强大的、方便的python图像处理库,功能非常强大,曾经一度被认为是python平台事实上的图像处理标准库,不过Python 2.7以后不再支持。
PIL
官方网站:
http://pythonware.com/products/pil/
二、Pillow
Pillow
是基于PIL
模块fork的一个派生分支,但如今已经发展成为比PIL
本身更具活力的图像处理库。
Pillow
友好支持python3,目前pypi
上最新版本是Pillow 7.2.0
。
Pillow
官方文档地址:
https://pillow.readthedocs.io/en/stable/
python3安装pillow
:
pip install Pillow
tip:Pillow
和PIL
不能在同一个环境中共存。在安装Pillow
之前,请先卸载PIL.
简单使用Pillow
:
# 从Pillow导入Image模块 from PIL import Image # 打开图片bride.jpg im = Image.open("bride.jpg") # 显示图片 im.rotate(45).show()
正是这里的from PIL
,可能会让很多新人疑惑。虽然是pillow
,但是导入包的写法依然是from PIL
。
Image
只是pillow
众多模块之一。其他模块以及对应文档参照官网:https://pillow.readthedocs.io/en/stable/reference/index.html
读取图片函数: cv2.imread() Image.open() 注意:Image.open()函数只是保持了图像被读取的状态,但是图像的真实数据并未被读取,因此如果对需要操作图像每个元素,如输出某个像素的RGB值等,需要执行对象的load()方法读取数据 Image.open()读取的通道顺序是RGB,cv2.imread()读取的通道顺序为BGR。 PIL函数读取图片的时候,结合np.array()使用。 注意: PIL.Image.save()直接保存RGB的图片 cv2.imwirte()保存图片的时候相当于做了BGR2RGB再去保存 显示的区别 cv2.imshow()采用BGR模式 plt.imshow() 采用RGB模式 img.show() 采用RGB模式 PIL.Image转Opencv cv2_img = cv2.cvtColor(numpy.asarray(Img_img),cv2.COLOR_RGB2BGR) Opencv转PIL.Image pil_img = Image.fromarray(cv2.cvtColor(cv_img,cv2.COLOR_BGR2RGB)) 有人做实验发现:PIL读取出来的图片转为numpy格式和直接使用cv读取的图片在像素点上并不是完全一致。 除了上述两种读取图片的方式以外,python还支持以下方式读取图片: (1)from matplotlib.image import imread img = imread(img_path) # 返回 ndarray (2)from http://skimage.io import imread img = imread(file_path) # 返回的是 ndarray