使用PYTHON進行圖像處理的首要步驟便是讀入圖像數據,這裡介紹讀入圖像文件的三種方式,包括Pillow(PIL)、OpenCV和GDAL。
Pillow
Pillow是PIL(Python Imaging Library)的分支,為Python增強了圖像處理能力。可以通過Image.open()函數從文件中讀取圖像數據。
from PIL import Image
img = Image.open("hopper.ppm")
如果讀取成功,則返回Image對象實例img,且具有format, size, mode等屬性,並可通過img.show()進行顯示。
Pillow/PIL通過save函數,在不指定輸出格式的情況下,PIL自動通過文件後綴確定存儲格式。
OpenCV
OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟體庫,通過cv2.imread()、cv2.imshow()、cv2.imwrite()等函數提供圖像文件的讀寫和顯示功能。
img = cv2.imread('messi5.jpg', 0)
cv2.imread()共有兩個參數,第一個參數為圖像文件名稱或路徑,第二個參數是表示讀入方式的標誌,可取值為cv2.IMREAD_COLOR(1,默認參數,讀取彩色圖像)、cv2.IMREAD_GRAYSCALE(0,以灰度模式讀取圖像)、cv2.IMREAD_UNCHANGED(-1,讀取含有alpha通道的圖像)。
其返回值img是一個numpy對象,可以方便地進行數值讀取、矩陣計算等處理。
OpenCV可以通過cv2.imshow或配合matplotlib實現圖像顯示。需要注意的是,通過OpenCV讀入的彩色圖像是BGR模式,而matplotlib採用RGB模式進行顯示,因此需要進行轉換。
GDAL
GDAL(Geospatial Data Abstraction Library)是柵格和矢量地理數據的轉換庫,是三種方式中最強大的圖像數據讀入方式,支持的圖像類型最廣泛。
from osgeo import gdal
dataset = gdal.Open(filename, gdal.GA_ReadOnly)
gdal.Open()的返回值dataset,是一個GDALDataset定義的柵格數據模型,包含多個柵格通道和其他元數據信息。
dataset不是一個可以直接顯示的數據類型,可以通過GetRasterBand, ReadAsArray函數轉換後使用matplotlib庫進行圖像顯示。