1. 程式人生 > >python基礎——讀取圖片

python基礎——讀取圖片

用於機器學習也好,深度學習也好,都需要讀取圖片的操作。

瞭解影象的mode

影象的模式定義了影象的型別和畫素的位寬。當前支援如下模式:

1:1位畫素,表示黑和白,但是儲存的時候每個畫素儲存為8bit。非黑即白

L:8位畫素,表示黑和白。在PIL中從模式轉換為L按照線面公式轉換  L = R * 299/1000 + G * 587/1000+ B * 114/1000

P:8位畫素,使用調色盤對映到其他模式。

RGB:3x8位畫素,為真彩色。

RGBA:4x8位畫素,有透明通道的真彩色。

CMYK:4x8位畫素,顏色分離。

YCbCr:3x8位畫素,彩色視訊格式。

I:32位整型畫素。灰色影象。(0,255)之間的數字表示不同的灰度。從模式轉為i模式的公式 I = R * 299/1000 + G * 587/1000 + B * 114/1000。結果與L結果完全一樣,只是L畫素是8bit,i畫素是32bit

F:32位浮點型畫素。與L轉換公式是一樣的,都是RGB轉為灰色值的公式,但模式F會保留小數部分

影象字尾名的轉換:

要注意的是:對於彩色影象,不管其格式是png,還是bmp,或者jpg,在PIL中,使用Image模組的open()函式開啟後,返回的影象物件的模式都是RGB,對於灰度影象,不管其影象格式是PNG,還是BMP,JPG,開啟後,其模式為L。

PNG BMP JPG彩色影象格式之間的轉換:可以通過Image模組的open函式和save函式,具體來說,在開啟這些影象時,PIL會將他們解碼成三通道的RGB影象。使用者可以基於RGB進行處理。處理完畢後可以將其處理結果儲存成PNG BMP JPG中任何格式。

PNG BMP JPG灰度影象格式之間的轉換,同理也可以通過類似途徑,只是解碼後時模式為L的影象。

python庫可以用來讀取圖片的庫

1. PIL.Image.open   (首選)

from PIL import Image
import numpy as np
img_obj = Image.open(file_path)
img_array = np.array(img_obj, dtype=np.uint8)

無論是jpg還是png都能準確讀取,但不直接返回ndarray,open()函式開啟影象,但並不讀入,直到有操作發生

PIL.Image.open 不直接返回numpy物件,可以用numpy提供的函式進行轉換,參考

Image和Ndarray互相轉換; 

其他模組都直接返回numpy.ndarray物件,通道順序為RGB,通道值得預設範圍為0-255。

使用opencv讀取影象,直接返回numpy.ndarray 物件,通道順序為BGR ,注意是BGR,通道值預設範圍0-255

2. scipy.ndimage.imread

3. scipy.misc.imread

from scipy.misc import imread
data = imread(image_root)
#data是 ndarray物件

4. skimage.io.imread

from skimage.io import imread
img = imread(file_path)

5. cv2.imread

6. matplotlib.image.imread

import matplotlib.image import imread
data = imread(image_root)
#data是 ndarray物件