cv2.imread()與PIL中Image.open(),以及相互轉換


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()




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM