Python中Opencv和PIL.Image讀取圖片的差異對比


近日,在進行深度學習進行推理的時候,發現不管怎么樣都得不出正確的結果,再仔細和正確的代碼進行對比了后發現原來是Python中不同的庫讀取的圖片數組是有差異的。

image = np.array(Image.open(image_file).convert('RGB'))
image = cv2.imread(image_file)

上面第一行代碼就是導致錯誤出現的原因,我把代碼改成第二行代碼模型就能夠正確的推理了。(巨坑),以后謹記,在使用Python讀取圖片的時候最好使用OpenCV來讀取。

下面給出兩種方式讀取圖片具體的差異,內容來自:https://blog.csdn.net/on_theway10/article/details/91814197

imshow

1、Opopencv  : cv2.imshow()采用BGR模式,通過cv2.imread()讀取;
2、matplotlib.pyplot  : plt.imshow() 采用RGB模式,   通過plt.imread()讀取;
3、PIL.Image :  img.show()  采用RGB模式, 通過Image.open()讀取;img對圖片對象
備注:通過cv2.VideoCapture方法來讀取video的frame,得到的frame的通道順序是BGR的!!!

下面一組圖依次是:img、plt.imshow(cv_img)、Img_img.show()、plt.imshow(plt_img) 

 

 cv2(BGR)

# img為BGR通道
img = cv2.imread(img_path, mode) # mode = [1, 0, -1]依次表示彩色、灰度、彩色+alpha, 默認為1;
cv2.imshow('test', img)
cv2.waitKey(0) # 保持圖形界面,直到你在終端輸入任意字符
cv2.destroyAllWindows()

PIL.Image(RGB)

img = Image.open(img_path)
img.show()

PIL.Image轉Opencv

cv2_img = cv2.cvtColor(numpy.asarray(Img_img),cv2.COLOR_RGB2BGR)

Opencv轉PIL.Image

pil_img = Image.fromarray(cv2.cvtColor(cv_img,cv2.COLOR_BGR2RGB))

 




免責聲明!

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



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