子沐課堂——Python圖像處理

編程語言 Python 圖像處理 OS X 子沐課堂 2017-03-28

圖像處理

本章工作任務

u 任務1:瞭解Pillow庫的基本操作

u 任務2:掌握圖像格式轉換

u 任務3:掌握改變圖像尺寸

u 任務4:掌握剪裁圖像

u 任務5:掌握濾鏡處理

本章技能目標及重難點

編號技能點描述級別
1瞭解Pillow庫的基本操作
2掌握圖像格式轉換★★
3u掌握改變圖像尺寸★★★
4掌握剪裁圖像★★★
5掌握濾鏡處理★★★

注: "★"理解級別 "★★"掌握級別 "★★★"應用級別

本章學習目標

本章開始學習Python圖像處理,需要同學們理解如何使用Pillow來操作圖像,實現格式轉換,改變大小尺寸,裁剪,濾鏡處理。

本章學習建議

本章適合有Python基礎的學員學習。

本章內容(學習活動)

1.1為什麼使用Pillow?

Python的圖像處理通常用Pillow(Python Imaging Library(Fork))來進行。Pillow有PIL(Python Imaging Library)的分支工程開發而來。由於PIL已經停止開發及維護,所以如今Pillow成為了主流。他支持JPEG,PNG,GIF,BMP等多種圖像格式。

1.1.1安裝Pillow

Pillow與多種處理圖像數據的程序庫存在依賴關係,因此安裝時需要多級注意。目前Pillow在PyPI上提供了面向Window和OS X的wheel安裝包。在Window和OS X上安裝(包括用pip命令安裝)時不需要進行編譯。如果使用的是其他平臺,那麼由於需要從sdist進行c拓展的編譯,所以必須準備編譯器和各類圖像處理庫。

使用命令pip,進行安裝。

子沐課堂——Python圖像處理

1.1.2Ubuntu安裝Pillow

如果使用源碼構建,我們需要準備進行Pillow編譯時所需的庫。

首先,因為需要編譯C擴展,所以需要一些基本的開發工具。我們先來確認一下C擴展的安裝。

pkg-config python2.7 --libs --cflags

安裝Pillow需要的程序包

sudo apt-get install libjpeg-dev libopenjpeg-dev zliblgpdev libtiff5-dev

現在所需的工具和庫已經齊全了,可以使用pip進行安裝了。

pip install pillow

1.2如何進行圖像格式轉換

圖像文件的格式轉換通過在Image類的save方法的傳值參數中指定格式並保存來完成。下面,我們打開當前目錄下名為python.gif的圖像文件。

子沐課堂——Python圖像處理

將其轉換為JPEG格式,並保存在python_convert,jpg文件中。

子沐課堂——Python圖像處理

可以看到,程序在讀取完文件之後將圖像模式轉為了RGB。

在GIF以及不足256色的PNG、BMP等格式中,顏色信息都保存在調色板數據塊裡。這類文件用Pillow打開是分為P模式(調色板模式)和I模式(單色模式)。另外,JPEG文件有時還會是CMYK模式。當模式不支持save方式指定的格式時,程序會報錯,所以要先用convert方法進行模式轉換。

1.3如何改變圖像尺寸

如果想改變圖像尺寸,可以使用Image類的thumbnail方法或resize方法。下面,我們打開當前目錄下的python.jpg圖像文件。

將其長款縮小一半後保存為python_thumbnail.jpg。

Image類的對象能夠通過size屬性以元祖的形式獲取圖像的長和寬。

thumbanil方法的第一個傳值參數制定了圖像長和寬的元祖,第二個傳值參數制定了濾鏡Image.ANTIALIAS。濾鏡有NEAREST,BILINER、BICUBIC(雙三次方)、ANTIALIAS(抗鋸齒)這四種可供選擇,其中使用ANTIALIAS

子沐課堂——Python圖像處理

子沐課堂——Python圖像處理(抗鋸齒)修改尺寸後的圖像品質最高(損失最小)。

在執行thumbnail方法之後,會直接修改對象自身的圖像大小。但是,這個方法只能用於長寬比例不變的修改。變更長寬比例時需要使用resize方法。下面,我們打開當前目錄下名為python.jpg的圖像文件,將其長度放大為2倍後保存為python_resize.jpg。

子沐課堂——Python圖像處理

與thumbnail方法不同,resize方法的返回值是修改尺寸之後的Image類的對象。它同thumbnail一樣,可以制定濾鏡。

與thumbnail方法不同,resize方法的返回值是修改尺寸之後的Image類的對象。它同thumbnail一樣,可以制定濾鏡。

子沐課堂——Python圖像處理

子沐課堂——Python圖像處理

1.4如何進行裁剪

Image類的crop方法能夠以長方形裁剪圖像。下面,我們打開當前目錄下名為python.jpg的圖像文件,按照圖形的寬度從正中間裁剪一個長方形並保存為python_crop.jpg

子沐課堂——Python圖像處理

crop方法的傳值參數是包含了4個值的元祖(Tuple),這4個值代表長方形裁剪區域的左上角座標和右下角座標。crop的返回值為存有剪裁後圖像的Image類對象。

子沐課堂——Python圖像處理


1.5對圖像進行濾鏡處理

1.5.1全反色

進行濾鏡處理必須獲取像素值。像素值可以用Image類的getdata方法和getpixel方法來獲取。獲取的像素值為包含了R(紅)、G(綠)、B(藍)3個值的範圍均為0,255。下面,我們打開當前目錄下的名為python.jpg的圖像文件,將所有像素反色並保存為python_filter.jpg。

子沐課堂——Python圖像處理

getdata()方法能夠返回一個迭代器,用於逐一訪問圖像的每一組像素值。在上面例子中,我們注意去除了每個像素的像素值並進行反色(255減去色值)。等所有像素值處理完畢之後,用putdata方法替換了Image類的對象的像素。

子沐課堂——Python圖像處理

1.5.2單像素反色

如果要獲取指定座標的像素值,可以使用Image類的getpixel方法。下面,我們打開當前目錄下的名為python.jpg的圖像文件,講右上角的香色反色並保存為python_pixel.jpg。

子沐課堂——Python圖像處理

1.5.3總結

getpixel方法的傳值參數為含有橫縱座標(起點為0)兩個值的元祖。改寫指定位置像素值時使用putpixel方法。這些方法的方便之處在於能夠制定座標,但是速度太慢,因此一旦需要大量處理,他們的效率並不見得比getdata,putdata等方法更高。類似如下代碼,沒有getdata效率高。

子沐課堂——Python圖像處理

視頻學習更快捷瞭解Pillow的模塊的應用。

相關推薦

推薦中...