方法一:利用 PIL 中的 Image 函數
這個函數讀取出來不是 array 格式,這時候需要用 np.asarray(im) 或者 np.array(im)函數將其處理成array格式。
區別:np.array() 是深拷貝,np.asarray() 是淺拷貝。淺拷貝只拷貝父對象,不會拷貝對象的內部的子對象;深拷貝會拷貝對象及其子對象。
1 from PIL import Image 2 import numpy as np 3 4 #讀取 5 image = Image.open('fur.jpg') 6 #顯示 7 image.show() 8 #保存 9 image.save('new.jpg') 10 #轉換成array 11 im_array = np.array(image) 12 print(im_array.shape) 13 #array轉換成image 14 img = Image.fromarray(np.uint8(im_array)) 15 img.save('new1.jpg') #還可以指定圖片質量img.save('new1.jpg',quality=95),默認值為75
方法二:利用 matplotlib
利用 matplotlib.pyplot as plt 用於顯示圖片;利用matplotlib.image as mpimg 用於讀取圖片,並且讀取出來就是 array 格式。
1 import matplotlib.pyplot as plt 2 import matplotlib.image as mpimg 3 import numpy as np 4 5 img = mpimg.imread('fur.jpg') 6 print(img.shape) 7 plt.imshow(img) #該函數負責對圖像進行處理,並顯示其格式,但不能顯示,其后跟着plt.show()才能顯示出來 8 plt.axis('off') #不顯示坐標軸 9 plt.show() 10 plt.savefig('new.jpg')
方法三:利用 OpenCV-Python 接口
cv2.imread() 讀出來同樣是 array 形式,但是如果是單通道的圖,讀出來的是三通道的。
1 import cv2 2 3 img = cv2.imread('fur.jpg') 4 h,w,c = img.shape 5 cv2.imshow('window_title', img) 6 cv2.waitKey(5000) #里面的參數表示延遲多少毫秒,默認為0.當參數小於等於0時,可以理解為延遲無窮大毫秒,就是暫停了。不使用該函數的話會發現圖片一閃而過,觀察不到。 7 cv2.imwrite('new2.jpg',img)
方法四:圖像處理庫 Scipy
讀出來是 array 形式,並且按照(H,W,C)形式保存
1 import scipy.misc 2 import matplotlib.pyplot as plt 3 4 img = scipy.misc.imread('fur.jpg') 5 scipy.misc.imsave('new3.jpg',img) 6 plt.imshow(img) 7 plt.show()
