用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]
C/C++基本文法學習
STL
C++ primer