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 '''