近日,在進行深度學習進行推理的時候,發現不管怎么樣都得不出正確的結果,再仔細和正確的代碼進行對比了后發現原來是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))
