圖像處理
本章工作任務(wù)
u 任務(wù)1:了解Pillow庫的基本操作
u 任務(wù)2:掌握圖像格式轉(zhuǎn)換
u 任務(wù)3:掌握改變圖像尺寸
u 任務(wù)4:掌握剪裁圖像
u 任務(wù)5:掌握濾鏡處理
本章技能目標(biāo)及重難點(diǎn)
編號(hào)技能點(diǎn)描述級別
1了解Pillow庫的基本操作★
2掌握圖像格式轉(zhuǎn)換★★
3u掌握改變圖像尺寸★★★
4掌握剪裁圖像★★★
5掌握濾鏡處理★★★
注: "★"理解級別 "★★"掌握級別 "★★★"應(yīng)用級別
本章學(xué)習(xí)目標(biāo)
本章開始學(xué)習(xí)Python圖像處理瓶颠,需要同學(xué)們理解如何使用Pillow來操作圖像疾牲,實(shí)現(xiàn)格式轉(zhuǎn)換,改變大小尺寸,裁剪贾惦,濾鏡處理梧油。
本章學(xué)習(xí)建議
本章適合有Python基礎(chǔ)的學(xué)員學(xué)習(xí)渠驼。
本章內(nèi)容(學(xué)習(xí)活動(dòng))
1.1為什么使用Pillow敢会?
Python的圖像處理通常用Pillow(Python Imaging Library(Fork))來進(jìn)行。Pillow有PIL(Python Imaging Library)的分支工程開發(fā)而來陷谱。由于PIL已經(jīng)停止開發(fā)及維護(hù)烙博,所以如今Pillow成為了主流。他支持JPEG烟逊,PNG渣窜,GIF,BMP等多種圖像格式宪躯。
1.1.1安裝Pillow
Pillow與多種處理圖像數(shù)據(jù)的程序庫存在依賴關(guān)系乔宿,因此安裝時(shí)需要多級注意。目前Pillow在PyPI上提供了面向Window和OS X的wheel安裝包访雪。在Window和OS X上安裝(包括用pip命令安裝)時(shí)不需要進(jìn)行編譯详瑞。如果使用的是其他平臺(tái),那么由于需要從sdist進(jìn)行c拓展的編譯臣缀,所以必須準(zhǔn)備編譯器和各類圖像處理庫坝橡。
使用命令pip,進(jìn)行安裝精置。
1.1.2Ubuntu安裝Pillow
如果使用源碼構(gòu)建计寇,我們需要準(zhǔn)備進(jìn)行Pillow編譯時(shí)所需的庫。
首先,因?yàn)樾枰幾gC擴(kuò)展番宁,所以需要一些基本的開發(fā)工具蹲堂。我們先來確認(rèn)一下C擴(kuò)展的安裝。
pkg-config python2.7 --libs --cflags
安裝Pillow需要的程序包
sudo apt-get install libjpeg-dev libopenjpeg-dev zliblgpdev libtiff5-dev
現(xiàn)在所需的工具和庫已經(jīng)齊全了贝淤,可以使用pip進(jìn)行安裝了。
pip install pillow
1.2如何進(jìn)行圖像格式轉(zhuǎn)換
圖像文件的格式轉(zhuǎn)換通過在Image類的save方法的傳值參數(shù)中指定格式并保存來完成政供。下面播聪,我們打開當(dāng)前目錄下名為python.gif的圖像文件。
將其轉(zhuǎn)換為JPEG格式布隔,并保存在python_convert,jpg文件中离陶。
可以看到,程序在讀取完文件之后將圖像模式轉(zhuǎn)為了RGB衅檀。
在GIF以及不足256色的PNG招刨、BMP等格式中,顏色信息都保存在調(diào)色板數(shù)據(jù)塊里哀军。這類文件用Pillow打開是分為P模式(調(diào)色板模式)和I模式(單色模式)沉眶。另外,JPEG文件有時(shí)還會(huì)是CMYK模式杉适。當(dāng)模式不支持save方式指定的格式時(shí)谎倔,程序會(huì)報(bào)錯(cuò),所以要先用convert方法進(jìn)行模式轉(zhuǎn)換猿推。
如果你在學(xué)習(xí)Python的過程當(dāng)中有遇見任何問題片习,可以加入我的python交流學(xué)企鵝群:【611+530+101】,多多交流問題蹬叭,互幫互助藕咏,群里有不錯(cuò)的學(xué)習(xí)教程和開發(fā)工具。學(xué)習(xí)python有任何問題(學(xué)習(xí)方法秽五,學(xué)習(xí)效率孽查,如何就業(yè)),可以隨時(shí)來咨詢我
1.3如何改變圖像尺寸
如果想改變圖像尺寸筝蚕,可以使用Image類的thumbnail方法或resize方法卦碾。下面,我們打開當(dāng)前目錄下的python.jpg圖像文件起宽。
將其長款縮小一半后保存為python_thumbnail.jpg洲胖。
Image類的對象能夠通過size屬性以元祖的形式獲取圖像的長和寬。
thumbanil方法的第一個(gè)傳值參數(shù)制定了圖像長和寬的元祖坯沪,第二個(gè)傳值參數(shù)制定了濾鏡Image.ANTIALIAS绿映。濾鏡有NEAREST,BILINER、BICUBIC(雙三次方)叉弦、ANTIALIAS(抗鋸齒)這四種可供選擇丐一,其中使用ANTIALIAS
(抗鋸齒)修改尺寸后的圖像品質(zhì)最高(損失最小)淹冰。
在執(zhí)行thumbnail方法之后库车,會(huì)直接修改對象自身的圖像大小。但是樱拴,這個(gè)方法只能用于長寬比例不變的修改柠衍。變更長寬比例時(shí)需要使用resize方法。下面晶乔,我們打開當(dāng)前目錄下名為python.jpg的圖像文件珍坊,將其長度放大為2倍后保存為python_resize.jpg。
與thumbnail方法不同正罢,resize方法的返回值是修改尺寸之后的Image類的對象阵漏。它同thumbnail一樣,可以制定濾鏡翻具。
1.4如何進(jìn)行裁剪
Image類的crop方法能夠以長方形裁剪圖像履怯。下面,我們打開當(dāng)前目錄下名為python.jpg的圖像文件呛占,按照圖形的寬度從正中間裁剪一個(gè)長方形并保存為python_crop.jpg
crop方法的傳值參數(shù)是包含了4個(gè)值的元祖(Tuple)虑乖,這4個(gè)值代表長方形裁剪區(qū)域的左上角坐標(biāo)和右下角坐標(biāo)。crop的返回值為存有剪裁后圖像的Image類對象晾虑。
1.5對圖像進(jìn)行濾鏡處理
1.5.1全反色
進(jìn)行濾鏡處理必須獲取像素值疹味。像素值可以用Image類的getdata方法和getpixel方法來獲取。獲取的像素值為包含了R(紅)帜篇、G(綠)糙捺、B(藍(lán))3個(gè)值的范圍均為0,255。下面笙隙,我們打開當(dāng)前目錄下的名為python.jpg的圖像文件洪灯,將所有像素反色并保存為python_filter.jpg。
getdata()方法能夠返回一個(gè)迭代器竟痰,用于逐一訪問圖像的每一組像素值签钩。在上面例子中,我們注意去除了每個(gè)像素的像素值并進(jìn)行反色(255減去色值)坏快。等所有像素值處理完畢之后铅檩,用putdata方法替換了Image類的對象的像素。
1.5.2單像素反色
如果要獲取指定坐標(biāo)的像素值莽鸿,可以使用Image類的getpixel方法昧旨。下面拾给,我們打開當(dāng)前目錄下的名為python.jpg的圖像文件,講右上角的香色反色并保存為python_pixel.jpg兔沃。
1.5.3總結(jié)
getpixel方法的傳值參數(shù)為含有橫縱坐標(biāo)(起點(diǎn)為0)兩個(gè)值的元祖蒋得。改寫指定位置像素值時(shí)使用putpixel方法。這些方法的方便之處在于能夠制定坐標(biāo)乒疏,但是速度太慢额衙,因此一旦需要大量處理,他們的效率并不見得比getdata怕吴,putdata等方法更高入偷。類似如下代碼,沒有g(shù)etdata效率高械哟。
視頻學(xué)習(xí)更快捷了解Pillow的模塊的應(yīng)用。