我们在进行数据处理的时候,经常会遇到这样的问题,我应该用什么来打开我的图片呢?接下来我们就来介绍一下常见的两种打开图片的方法,以及区别
1. img = Image.open(path),这是PIL中的一个处理图片的函数,使用时需 from PIL import Image
- 首先img的type,这里的img的类型是Image对象,不是普通的数组。
- 其次,图像通道,我们都知道,一般图像由三通道构成分别是R、G、B。这里的img通道顺序即为RGB,因此在显示时往往会呈现不同的效果,如果图像为RGBA格式(这里的A表示透明度),则使用Image方法读入的是4通道的数据,cv2.imread不具备这种能力。
2. img = cv2.imread(path),这是opencv中的处理图片的函数,使用时需 import cv2
- 首先img的type,这里的img的type是np.adarray()类型
- 其次,图像通道,这里的图像通道顺序为BGR
2. img = skimage.io.imread(path),这是skimage包中的读入图片的函数,使用时需 import skimage
- 首先img的type,这里的img的type也是np.adarray()类型
- 其次,图像通道,这里的图像通道顺序为RGB,如果图像是RGBA格式的话,读入的也是一个4通道的数据
图像显示的时候有两种方式,plt.imshow(array) 和 cv2.imshow(array)。两个函数都要求输入为数组。因此Image读入的图片要转换为数组。plt函数读入的顺序为RGB,cv2.imshow()读入的顺序为BGR。因此Image与plt.imshow()配合使用。cv2自己的一套使用,skimage读入的数据在显示时两种方法都可以使用,但是使用cv2.imshow时要将前两个通道进行调换。
转换:
1.Image对象->np.adarray
img = Image.open(path)
img_array = np.array(img)
2.np.adarray->Image对象
img = cv2.imread(path)
img_Image = Image.fromarray(np.uint8(img))