1 ''' PIL 中的convert() 也有着改变通道排列的效果,期待之后补充'''
2
3 import cv2
4 from PIL import Image
5 import numpy as np
6 import matplotlib.pyplot as plt
7
8
9
10 img_path = '../data/a.jpg'
11 print("="*15,"Image.open() 读取图像","="*15)
12 img = Image.open(img_path)
13 print("Image.open() 读取图片,type(img) :",type(img)) # <class 'PIL.JpegImagePlugin.JpegImageFile'>
14 print("Image.open() 读取图片,img.size (没有shape属性) :",img.size) # (328, 260)
15 print("Image.open() 读取图片,img.mode :",img.mode) # RGB
16 # Image.open() 读取图片,没有shape属性,只有size(高,宽)
17 plt.subplot(221)
18 plt.imshow(img)
19
20 print("="*15,"cv2.imread() 读取图像","="*15)
21 img_cv2 = cv2.imread(img_path)
22 print("cv2.imread() 读取图片, type(img_cv2):", type(img_cv2)) # <class 'numpy.ndarray'>
23 print("cv2.imread() 读取图片(高,宽,通道(B,G,R)):",img_cv2.shape) # (260, 328, 3)
24 # 将通道的排列放在宽高之前
25 img = np.transpose(img_cv2, (2,0,1))
26 print("通过np.transpose 函数将通道放在宽高之前: ",img.shape) # (3, 260, 328)
27
28 # 显示原图(BGR排序),OpenCV 默认读取图片的数据为 (高,宽,通道(B,G,R))
29 plt.subplot(223)
30 plt.imshow(img_cv2)
31 # 尝试转换通道排列顺序,并显示转换后图像(RGB)
32 img_RGB = img_cv2[:,:,(2,1,0)] # 改变通道的排列顺序
33 plt.subplot(224)
34 plt.imshow(img_RGB)
35
36 img_RGB2 = img_cv2[:,:,::-1] # 可以实现与上一行代码相同的效果
37 plt.subplot(222)
38 plt.imshow(img_RGB2)
39 print("OpenCV 默认读入图片颜色通道排列为 BGR,可以通过 img_RGB = img_cv2[:,:,(2,1,0)] 或 img_RGB2 = img_cv2[:,:,::-1] 将颜色通道排列改为 RGB")
40
41 plt.show()
42
43 ''' 运行结果:
44 =============== Image.open() 读取图像 ===============
45 Image.open() 读取图片,type(img) : <class 'PIL.JpegImagePlugin.JpegImageFile'>
46 Image.open() 读取图片,img.size (没有shape属性) : (328, 260)
47 Image.open() 读取图片,img.mode : RGB
48 =============== cv2.imread() 读取图像 ===============
49 cv2.imread() 读取图片, type(img_cv2): <class 'numpy.ndarray'>
50 cv2.imread() 读取图片(高,宽,通道(B,G,R)): (260, 328, 3)
51 通过np.transpose 函数将通道放在宽高之前: (3, 260, 328)
52 OpenCV 默认读入图片颜色通道排列为 BGR,可以通过 img_RGB = img_cv2[:,:,(2,1,0)] 或 img_RGB2 = img_cv2[:,:,::-1] 将颜色通道排列改为 RGB
53 '''