前言
由于筆者近期的研究課題與圖像后處理有關,需要通過圖像處理工具對圖像進行變換和處理,進而生成合適的訓練圖像數據。該系列文章即主要記錄筆者在不同的環境下進行圖像處理時常用的工具和庫。在 Python 環境下,對圖像的處理筆者主要使用 Pillow 庫,主要操作包括對圖像的讀取、存儲和變換等。實際應用中,Pillow 中提供的 Image 模塊適合對圖像整體進行變換處理操作。
注:以下介紹僅包括對應模塊和函數的基礎用法,故而在介紹時省略了部分參數和選項,更完備的用法和介紹可參考 Pillow 的官方文檔。
安裝
用戶可通過 pip 直接安裝 Pillow,更多安裝方式可以參見這里。
pip install Pillow #安裝 pillow
使用
在日常應用過程中,使用最多的是 Pillow 提供的 Image 模塊,其提供了包括圖像存儲、變換以及一系列的相關處理功能。Pillow 使用 Image 對象來表示圖像對象并基于其定義圖像的屬性信息以及可針對其進行的操作,后續即主要介紹通過 Image 對象可進行的圖像操作。在 Python 中使用時,用戶首先需從 PIL 中導入對應的 Image 模塊。
from PIL import Image #通過 Image 進行圖像處理相關的操作
圖像讀取與存儲
通過 Image 提供的 open 方法讀取圖像,其以指定的文件名為參數,返回值為對應圖像的 Image 對象,后續即可針對圖像對應的 Image 對象進行操作。
im = Image.open( "test.png" ) # open 方法以圖像名(或圖像對象)為參數,返回一個 Image 對象
通過 Image 對象的 save 方法存儲圖像對象,其使用存儲目標文件名為參數,也可通過 format 參數指定存儲文件的格式。
im.save( "test.png" ) # im 為 Image 對象,其被保存至 test.png,不指定 format 參數時,該方法通過文件后綴推測文件類型 im.save( "test.jpg" , format="JPEG") # 以 JPEG 格式保存 Image 對象 im 至文件 test.jpg 中
基本屬性
圖像對應的 Image 對象具備基本屬性。用戶可以通過這些屬性獲得圖像最基本的信息,Image 對象的完整屬性信息可以查看這里。
im.filename # Image 對象 im 對應的文件/路徑名 im.mode # Image 對象圖像數據的解釋方式,如灰度圖為 “L”,彩色圖為 “RGB”等 im.size # 返回圖像的尺寸信息,為( width , height ) 格式的元祖
圖像類型轉換
不同的圖像數據具有不同的圖像格式,進而擁有不同的組織數據的方式。對于 RGB 圖像而言,圖像擁有 R、G、B 三個通道,像素數據由三個對應三通道的 8 bit 數據組成;對于黑白圖像而言,其每個像素由一個 8 bit 字節表示等等。在打開圖像時,open 方法會自動解析圖像的格式,用戶可通過 Image 對象的 mode 屬性獲得圖像的狀態。
Image 對象可通過 convert 方法進行圖像類型間的轉換,其使用轉換的目標類型的字符串為參數,返回轉換后的 Image 對象,常見的類型包括 RGB(真彩)、L(黑白)、YCbCr(視頻圖像)、HSV(色調飽和度亮度彩色空間)。
data = im.convert( "L" ) #獲得 RGB 圖像 im 的灰度圖
與 numpy 數組的轉換
在程序中,一般使用圖像對應的 Image 對象進行圖像相關的操作,針對圖像數據本身的計算處理一般將 Image 對象的數據轉換為 numpy 數據后進行,處理完成之后的 numpy 數據再被轉換為 Image 對象進行保存。
a. 將 Image 對象轉換為 numpy 數組
新聞熱點
疑難解答