PIL和pillow,opencv库的区别

 

一、PIL

分不清PILPillow,于是简单整理一下二者区别;

PIL全称是:Python Imaging Library。

PIL是一个强大的、方便的python图像处理库,功能非常强大,曾经一度被认为是python平台事实上的图像处理标准库,不过Python 2.7以后不再支持。

PIL官方网站:

http://pythonware.com/products/pil/

二、Pillow

Pillow是基于PIL模块fork的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库。

pillow

Pillow友好支持python3,目前pypi上最新版本是Pillow 7.2.0

Pillow官方文档地址:

https://pillow.readthedocs.io/en/stable/

python3安装pillow:

pip install Pillow

tip:PillowPIL不能在同一个环境中共存。在安装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

  

posted on 2022-10-29 10:27  lmqljt  阅读(1465)  评论(0编辑  收藏  举报

导航