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