matplotlib、PIL、cv2圖像操作 && caffe / tensorflow 通道順序


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] 

 




免責聲明!

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



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