python圖像處理模塊Pillow--Image模塊

1、簡介python

PIL:Python Imaging Library,已是Python平臺事實上的圖像處理標準庫了。PIL功能很是強大,但API卻很是簡單易用git

因爲PIL僅支持到Python 2.7,加上年久失修,因而一羣志願者在PIL的基礎上建立了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了許多新特性,所以,咱們能夠直接安裝使用Pillowgithub

 

2、安裝函數

使用 pip 命令安裝Pillow:spa

$ pip install Pillowrest

 

3、 基本概念code

一、通道視頻

每張圖片都是由一個或者多個數據通道構成,PIL容許在單張圖片中合成相同維數和深度的多個通道。對象

以RGB圖像爲例,每張圖片都是由三個數據通道構成,分別爲R、G和B通道。而對於灰度圖像,則只有一個通道。blog

對於一張圖片的通道數量和名稱,能夠經過方法getbands()來獲取。方法getbands()是Image模塊的方法,它會返回一個字符串元組(tuple)。該元組將包括每個通道的名稱

方法getbands()的使用以下:

1 from PIL import Image
2 
3 im = Image.open(image_path)  # image_path爲圖像的絕對路徑
4 # 返回圖像的通道 5 print(im.getbands(), type(im.getbands()))

輸出:('R', 'G', 'B', 'A') <class 'tuple'>

 

二、模式

圖像的模式定義了圖像的類型和像素的位寬,當前支持以下模式:

1:1位像素,表示黑和白,可是存儲的時候每一個像素存儲爲8bit。
L:8位像素,表示黑和白。
P:8位像素,使用調色板映射到其餘模式。
RGB:3x8位像素,爲真彩色。
RGBA:4x8位像素,有透明通道的真彩色。
CMYK:4x8位像素,顏色分離。
YCbCr:3x8位像素,彩色視頻格式。
I:32位整型像素。
F:32位浮點型像素。
PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)。

能夠經過Image對象的mode屬性讀取圖像的模式。其返回值是包括上述模式的字符串

屬性mode的使用以下:

1 from PIL import Image
2 
3 im = Image.open(image_path)
4 print(im.mode, type(im.mode))

輸出:RGBA <class 'str'>

 

三、尺寸

經過Image對象的size屬性能夠獲取圖片的尺寸。圖像大小,以像素爲單位。大小是一個2元組(寬度、高度)(width, height)

屬性size的使用以下:

1 from PIL import Image
2 
3 im = Image.open(image_path)
4 # 返回圖像尺寸
5 print(im.size, type(im.size))

輸出:(750, 1334) <class 'tuple'>

 

四、座標系統

PIL使用笛卡爾像素座標系統,座標(0,0)位於左上角。注意:座標值表示像素的角;位於座標(0,0)處的像素的中心實際上位於(0.5,0.5)。

座標常常用於二元組(x,y)。長方形則表示爲四元組,前面是左上角座標。例如,一個覆蓋800x600的像素圖像的長方形表示爲(0,0,800,600)。

 

五、調色板

調色板模式 ("P")使用一個顏色調色板爲每一個像素定義具體的顏色值

 

六、信息

使用Image對象的info屬性能夠爲一張圖片添加一些輔助信息。這個是字典對象。加載和保存圖像文件時,多少信息須要處理取決於文件格式。

存儲與圖像相關的數據的字典。文件處理程序使用此字典傳遞從文件中讀取的各類非圖像信息

屬性info的使用以下:

1 from PIL import Image
2 
3 im = Image.open(image_path)
4 # 返回圖像信息
5 print(im.info, type(im.info))

輸出:{} <class 'dict'>

 

七、濾波器

對於將多個輸入像素映射爲一個輸出像素的幾何操做,PIL提供了4個不一樣的採樣濾波器:

NEAREST:最近濾波。從輸入圖像中選取最近的像素做爲輸出像素。它忽略了全部其餘的像素。
BILINEAR:雙線性濾波。在輸入圖像的2x2矩陣上進行線性插值。注意:PIL的當前版本,作下采樣時該濾波器使用了固定輸入模板。
BICUBIC:雙立方濾波。在輸入圖像的4x4矩陣上進行立方插值。注意:PIL的當前版本,作下采樣時該濾波器使用了固定輸入模板。
ANTIALIAS:平滑濾波。這是PIL 1.1.3版本中新的濾波器。對全部能夠影響輸出像素的輸入像素進行高質量的重採樣濾波,以計算輸出像素值。在當前的PIL版本中,這個濾波器只用於改變尺寸和縮略圖方法。
注意:在當前的PIL版本中,ANTIALIAS濾波器是下采樣(例如,將一個大的圖像轉換爲小圖)時惟一正確的濾波器。BILIEAR和BICUBIC濾波器使用固定的輸入模板,用於固定比例的幾何變換和上採樣是最好的。

Image模塊中的方法resize()和thumbnail()用到了濾波器

方法resize()的使用以下:

語法:Image.resize(size, resample=0)

參數:size-2元組:(寬度、高度),以像素爲單位

   resample-可選的重採樣過濾器,若是省略,或者圖像的模式爲「1」或「P」,則將其設置爲nearest

1 from PIL import Image
2 
3 course_im = Image.open(course_path)
4 print(course_im.size, type(course_im.size))
5 course_resize = course_im.resize((538, 336))  # 返回此圖像的大小調整後的副本
6 print(course_resize.size)

輸出:

(750, 400)

(538, 336)

 若是要使用其餘濾波器能夠經過下面的方法來實現:

from PIL import Image

course_im = Image.open(course_path)
print(course_im.size, type(course_im.size))
course_resize = course_im.resize((538, 336), Image.ANTIALIAS)
print(course_resize.size)

方法thumbnail()的使用以下:

語法:Image.thumbnail(sizeresample=1)

參數:size-2元組:(寬度、高度),以像素爲單位

           resample-可選的重採樣過濾器,若是省略,則默認爲PIL.Image.BICUBIC

把這個圖像作成縮略圖

請注意,PIL當前版本中的BILINEARBICUBIC並不適合生成縮略圖。你應該用ANTIALIAS,除非速度比質量重要得多。

from PIL import Image

im = Image.open(avtar_path)
avtar_im.thumbnail((98, 98))  # 返回None

 

4、Image模塊

Image模塊是PIL中最重要的模塊,它有一個類叫作image,與模塊名稱相同。Image類有不少函數、方法及屬性,接下來將依次對image類的屬性、函數和方法進行介紹。

類函數

實例屬性

 

實例方法

一、paste(im, box=None, mask=None)  將另外一個圖像粘貼到此圖像中

參數:

box:要麼是一個2元組給出左上角,一個4元組定義左、上、右、下像素座標,或None(好比(0,0))

mask:可選的掩碼圖像

注意:若是模式不匹配,則將粘貼的圖像轉換爲此圖像的模式

相關文章
相關標籤/搜索