用python進行圖像處理中分別用到過matplotlib.pyplot、PIL、cv2三種庫,這三種庫圖像讀取和保存方法各異,並且圖像讀取時順序也有差異,如plt.imread和PIL.Image.open讀入的都是RGB順序,而cv2.imread讀入的是BGR順序。使用時需要倍加注意。
現參考http://www.jianshu.com/p/3977d674da85。對這三種庫圖像讀取保存進行梳理。與原參考資源有一定差異。當前使用為python3.5版本。
讀取圖像
1.matplotlib.pyplot
matplotlib讀取進來的圖片是unit8,0-255范圍。
2.PIL.image.open
PIL是有自己的數據結構的,但是可以轉換成numpy數組,轉換后的數組為unit8,0-255
3.cv2.imread
opencv讀進來的是numpy數組,類型是uint8,0-255。
4.plt.imread和PIL.Image.open讀入的都是RGB順序,而cv2.imread讀入的是BGR順序。使用時需要倍加注意。
顯示圖像
均用plt.imshow(img):因為opencv讀取進來的是bgr順序呢的,而imshow需要的是rgb順序,因此需要先反過來plt.imshow(img[..., -1::-1])。
保存圖像
1 PIL.image - 保存PIL格式的圖片
img.save("1.jpg")
2.cv2.imwrite - 保存numpy格式的圖片
cv2.imwrite("1.jpg")
OpenCV讀取的圖片從BGR轉換為RGB
import cv2
img=cv2.imread(‘imagename’)
b,g,r=cv2.split(img)
img2=cv2.merge([r.g.b])
img2=img[: , : , : : -1]
- 顯示
b,g,r = cv2.split(img)
img_rgb = cv2.merge([r,g,b])
plt.figure()
plt.imshow(img_rgb)
plt.show()
- caffe / tensorflow 通道順序問題
img = np.transpose(img, (0, 2, 3, 1)) img = img.reshape(img.shape[0], img.shape[2], img.shape[3], img.shape[1]) img_new = zeros((img.shape[0], img.shape[2], img.shape[3], img.shape[1]), dtype = np.float32) for c in range(0, img.shape[1]): for i in range(0, img.shape[2]): for j in range(0, img.shape[3]): img_new[:,c,i,j] = img_new[:,i,j,c]