【Pillow】Python圖像處理

本文地址:http://www.reibang.com/p/3740dec1f436


1. 簡介

Python傳統(tǒng)的圖像處理庫PIL(Python Imaging Library ),可以說基本上是Python處理圖像的標(biāo)準(zhǔn)庫鉴腻,功能強(qiáng)大迷扇,使用簡單。

但是由于PIL不支持Python3爽哎,而且更新緩慢蜓席。所以有志愿者在PIL的基礎(chǔ)上創(chuàng)建了一個(gè)分支版本,命名為Pillow课锌,Pillow目前最新支持到python3.6厨内,更新活躍,并且增添了許多新的特性渺贤。所以我們安裝Pillow即可雏胃。


2. 安裝

Pillow的安裝比較的簡單,直接pip安裝即可:

pip install Pillow

但是要注意的一點(diǎn)是志鞍,PillowPIL不能共存在同一個(gè)環(huán)境中瞭亮,所以如果安裝的有PIL的話,那么安裝Pillow之前應(yīng)該刪除PIL固棚。

由于是繼承自PIL的分支统翩,所以Pillow的導(dǎo)入是這樣的:

import PIL 
# 或者
from PIL import Image

3. Image

Image是Pillow中最為重要的類,實(shí)現(xiàn)了Pillow中大部分的功能此洲,這個(gè)類的主要用來表示圖片對(duì)象厂汗。要?jiǎng)?chuàng)建這個(gè)類的實(shí)例主要有三個(gè)方式:

  1. 從文件加載圖像
  2. 處理其他圖像獲得
  3. 創(chuàng)建一個(gè)新的圖像

3.1. 讀取圖像

一般來說,我們都是都過從文件加載圖像來實(shí)例化這個(gè)類呜师,如下所示:

from PIL import Image
picture = Image.open('happy.png')

如果沒有指定圖片格式的話娶桦,那么Pillow會(huì)自動(dòng)識(shí)別文件內(nèi)容為文件格式。

3.2. 新建圖像

Pillow新建空白圖像使用new()方法汁汗, 第一個(gè)參數(shù)是mode即顏色空間模式趟紊,第二個(gè)參數(shù)指定了圖像的分辨率(寬x高),第三個(gè)參數(shù)是顏色碰酝。

  • 可以直接填入常用顏色的名稱。如'red'戴差。
  • 也可以填入十六進(jìn)制表示的顏色送爸,如#FF0000表示紅色。
  • 還能傳入元組,比如(255, 0, 0, 255)或者(255袭厂, 0墨吓, 0)表示紅色。
picture = Image.new('RGB', (200, 100), 'red')

3.3. 保存圖像

保存圖片的話需要使用save()方法:

picture.save('happy.png')

保存的時(shí)候纹磺,如果沒有指定圖片格式的話帖烘,那么Pillow會(huì)根據(jù)輸入的后綴名決定保存的文件格式。


3.4. 圖像的坐標(biāo)表示

在Pillow中橄杨,用的是圖像的左上角為坐標(biāo)的原點(diǎn)(0秘症,0),所以這意味著式矫,x軸的數(shù)值是從左到右增長的乡摹,y軸的數(shù)值是從上到下增長的。

我們處理圖像時(shí)采转,常常需要去表示一個(gè)矩形的圖像區(qū)域聪廉。Pillow中很多方法都需要傳入一個(gè)表示矩形區(qū)域的元祖參數(shù)。

這個(gè)元組參數(shù)包含四個(gè)值故慈,分別代表矩形四條邊的距離X軸或者Y軸的距離板熊。順序是(左,頂察绷,右干签,底)。其實(shí)就相當(dāng)于克婶,矩形的左上頂點(diǎn)坐標(biāo)為(左筒严,頂),矩形的右下頂點(diǎn)坐標(biāo)為(右情萤,底)鸭蛙,兩個(gè)頂點(diǎn)就可以確定一個(gè)矩形的位置。

右和底坐標(biāo)稍微特殊筋岛,跟python列表索引規(guī)則一樣娶视,是左閉又開的≌鲈祝可以理解為[左, 右)[頂肪获, 底)這樣左閉右開的區(qū)間。比如(3, 2, 8, 9)就表示了橫坐標(biāo)范圍[3, 7]柒傻;縱坐標(biāo)范圍[2, 8]的矩形區(qū)域孝赫。


3.5. 常用屬性

  • PIL.Image.filename

    圖像源文件的文件名或者路徑,只有使用open()方法創(chuàng)建的對(duì)象有這個(gè)屬性红符。

    類型:字符串

  • PIL.Image.format

    圖像源文件的文件格式青柄。

  • PIL.Image.mode

    圖像的模式伐债,一般來說是“1”, “L”, “RGB”, 或者“CMYK” 。

  • PIL.Image.size

    圖像的大小

  • PIL.Image.width

    圖像的寬度

  • PIL.Image.height

    圖像的高度

  • PIL.Image.info

    圖像的一些信息致开,為字典格式


3.6. 常用方法

3.6.1. 裁剪圖片

Image使用crop()方法來裁剪圖像峰锁,此方法需要傳入一個(gè)矩形元祖參數(shù),返回一個(gè)新的Image對(duì)象双戳,對(duì)原圖沒有影響虹蒋。

croped_im = im.crop((100, 100, 200, 200))

3.6.2. 復(fù)制與粘貼圖像

復(fù)制圖像使用copy()方法:

copyed_im = im.copy()

粘貼圖像使用paste()方法:

croped_im = im.crop((100, 100, 200, 200))
im.paste(croped_im, (0, 0))

im對(duì)象調(diào)用了paste()方法,第一個(gè)參數(shù)是被裁剪下來用來粘貼的圖像飒货,第二個(gè)參數(shù)是一個(gè)位置參數(shù)元祖魄衅,這個(gè)位置參數(shù)是粘貼的圖像的左頂點(diǎn)。

3.6.3 調(diào)整圖像的大小

調(diào)整圖像大小使用resize()方法:

resized_im = im.resize((width, height))

resize()方法會(huì)返回一個(gè)重設(shè)了大小的Image對(duì)象膏斤。

3.6.4. 旋轉(zhuǎn)圖像和翻轉(zhuǎn)圖像

旋轉(zhuǎn)圖像使用rotate()方法徐绑,此方法按逆時(shí)針旋轉(zhuǎn),并返回一個(gè)新的Image對(duì)象:

# 逆時(shí)針旋轉(zhuǎn)90度
im.rotate(90)
im.rotate(180)
im.rotate(20, expand=True)

旋轉(zhuǎn)的時(shí)候莫辨,會(huì)將圖片超出邊界的邊角裁剪掉傲茄。如果加入expand=True參數(shù),就可以將圖片邊角保存住沮榜。

翻轉(zhuǎn)圖像使用transpose()

# 水平翻轉(zhuǎn)
im.transpose(Image.FLIP_LEFT_RIGHT)
# 垂直翻轉(zhuǎn)
im.transpose(Image.FLIP_TOP_BOTTOM)

3.6.5. 獲取單個(gè)像素的值

使用getpixel(xy)方法可以獲取單個(gè)像素位置的值:

im.getpixel((100, 100))

傳入的xy需要是一個(gè)元祖形式的坐標(biāo)盘榨。

如果圖片是多通道的,那么返回的是一個(gè)元祖蟆融。

3.6.6. 通過通道分割圖片

split()

split()可以將多通道圖片按通道分割為單通道圖片:

R, G, B = im.split()

split()方法返回的是一個(gè)元祖草巡,元祖中的元素則是分割后的單個(gè)通道的值。

getchannel(channel)

getchannel()可以獲取單個(gè)通道的數(shù)據(jù):

R = im.getchannel("R")

3.6.7. 加載圖片全部數(shù)據(jù)

我們可以使用load()方法加載圖片所有的數(shù)據(jù)型酥,并比較方便的修改像素的值:

pixdata = im.load()
pixdata[100,200] = 255

此方法返回的是一個(gè)PIL.PyAccess山憨,可以通過這個(gè)類的索引來對(duì)指定坐標(biāo)的像素點(diǎn)進(jìn)行修改。

3.6.8. 關(guān)閉圖片并釋放內(nèi)存

此方法會(huì)刪除圖片對(duì)象并釋放內(nèi)存

im.close()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弥喉,一起剝皮案震驚了整個(gè)濱河市郁竟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌由境,老刑警劉巖棚亩,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異虏杰,居然都是意外死亡讥蟆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門纺阔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘸彤,“玉大人,你說我怎么就攤上這事笛钝【埽” “怎么了低零?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拯杠。 經(jīng)常有香客問我,道長啃奴,這世上最難降的妖魔是什么潭陪? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮最蕾,結(jié)果婚禮上依溯,老公的妹妹穿的比我還像新娘。我一直安慰自己瘟则,他們只是感情好黎炉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著醋拧,像睡著了一般慷嗜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丹壕,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天庆械,我揣著相機(jī)與錄音,去河邊找鬼菌赖。 笑死缭乘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的琉用。 我是一名探鬼主播堕绩,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼邑时!你這毒婦竟也來了奴紧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤刁愿,失蹤者是張志新(化名)和其女友劉穎绰寞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铣口,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滤钱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脑题。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片件缸。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖叔遂,靈堂內(nèi)的尸體忽然破棺而出他炊,到底是詐尸還是另有隱情争剿,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布痊末,位于F島的核電站蚕苇,受9級(jí)特大地震影響没酣,放射性物質(zhì)發(fā)生泄漏忱详。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一锰瘸、第九天 我趴在偏房一處隱蔽的房頂上張望盒件。 院中可真熱鬧蹬碧,春花似錦、人聲如沸炒刁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翔始。三九已至罗心,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绽昏,已是汗流浹背协屡。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留全谤,地道東北人肤晓。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像认然,于是被迫代替她去往敵國和親补憾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 本文轉(zhuǎn)自 python數(shù)字圖像處理 基于python腳本語言開發(fā)的數(shù)字圖片處理包卷员,比如PIL,Pillow, op...
    jiandanjinxin閱讀 146,723評(píng)論 8 89
  • Image讀出來的是PIL的類型盈匾,而skimage.io讀出來的數(shù)據(jù)是numpy格式的 輸出可以看出Img讀圖片的...
    jiandanjinxin閱讀 97,100評(píng)論 2 52
  • Python用Pillow(PIL)進(jìn)行簡單的圖像操作 顏色與RGBA值 計(jì)算機(jī)通常將圖像表示為RGB值,或者再加...
    sunhaiyu閱讀 16,323評(píng)論 1 12
  • ——第一期:關(guān)于制作簡單動(dòng)態(tài)眨眼 一毕骡、探索背景 隨著人工智能的發(fā)展削饵,ai人臉識(shí)別已經(jīng)成為人工智能應(yīng)用中不可缺少的一...
    我是小冰紙呀閱讀 1,978評(píng)論 3 4
  • PHP中GD庫的使用 GD簡介 PHP 不僅限于只產(chǎn)生 HTML 的輸出,還可以創(chuàng)建及操作多種不同格式的圖像文件未巫。...
    dptms閱讀 1,012評(píng)論 0 2