https://www.cnblogs.com/chen-hw/p/11693806.html
對於Image.open()函數默認真彩圖像讀取通道順序為RGB,而cv2.imread()則是BGR。同時,當圖像格式為RGBA時,Image.open(‘---.jpg’)讀取的格式為RGBA(其中A表示圖像的alpha通道,即RGBA共四個通道),而cv2.imread('---.jpg')讀取的格式是BGR,只有三個通道。
Image 對象和 numpy 可以互相轉換。但是要注意,對於同一張圖片, 兩種方式讀取得到的數據,可能存在差異。
使用以下代碼發現, 當圖片是png格式,讀取結果是一致的;當圖片是jpg格式時,讀取結果是不一致的。這可能是因為Image.open 與 cv2.imread 在解碼jpg時運算有差異。
img_name = '/home/szh/pictures/1.png'
img_pil = Image.open(img_name).convert('RGB')
img_pil = np.asarray(img_pil)
cv2_img = cv2.imread(img_name, cv2.IMREAD_COLOR)
cv2_img = cv2.cvtColor(cv2_img, cv2.COLOR_BGR2RGB)
diff = cv2.absdiff(cv2_img, img_pil)
cv2.imshow('cv2_img', cv2_img)
cv2.imshow('diff', diff)
cv2.waitKey()