Python圖像處理教程(Pillow)6 Image類

Image類簡(jiǎn)介

Image模塊是Pillow庫的核心部分确丢。它是用來存儲(chǔ)所有類型的圖像的主類魂那,它還包含大量的函數(shù)方法六敬,用于以各種方式處理圖像诡右。

Image 類的重要功能:

  • 創(chuàng)建圖像安岂。

  • 保存圖像。

  • 圖像生成器帆吻。

  • 圖像帶

  • 圖像屬性和統(tǒng)計(jì)域那。

  • 像素訪問 - 如何有效地讀寫像素。

  • 與其他庫集成 - 如何有效地交換圖像數(shù)據(jù)猜煮。

  • 圖像操作(旋轉(zhuǎn)次员、轉(zhuǎn)置等

  • 圖像合成(混合等)

  • 圖像過濾(過濾功能)

Image模塊還包含添加擴(kuò)展的功能,例如王带,處理某些圖像格式的特殊編碼方案淑蔚。這是一個(gè)非常專業(yè)的領(lǐng)域,擴(kuò)展通常是用C語言編寫辫秧。

創(chuàng)建圖像

Image.new

Image.open

open也接受一個(gè)格式參數(shù)束倍。

boat_image = Image.open("boat-small.jpg", formats=['PNG', 'JPEG'])

open通常會(huì)嘗試打開任何支持格式的圖像文件,但如果你提供了一個(gè)格式列表,它將只嘗試打開這些格式的圖像绪妹。如果你想避免意外地打開一些晦澀難懂的格式甥桂,而這些格式可能有你的應(yīng)用程序不支持的功能,這就很有用邮旷。

open通過檢查文件來確定文件的類型黄选。它不關(guān)注文件的擴(kuò)展名。因此婶肩,舉例來說办陷,如果一個(gè)PNG文件被意外地以.jpg為擴(kuò)展名保存,上面的代碼將毫無錯(cuò)誤地打開PNG文件律歼。

這段代碼只允許JPEG圖像民镜。

boat_image = Image.open("boat-small.jpg", formats=['JPEG'])

如果該文件真的是JPEG文件,這段代碼將打開該文件险毁,但如果該文件是其他格式制圈,則會(huì)引發(fā)錯(cuò)誤。

你也可以提供讀取模式下打開的文件對(duì)象畔况,而不是文件名鲸鹦。

copy

copy方法創(chuàng)建圖像的新副本。

image2 = image.copy()

其他方法

你可以從數(shù)據(jù)中創(chuàng)建圖像跷跪,以內(nèi)存數(shù)組的形式(比如NumPy數(shù)組)馋嗜,你可以使用fromarray, frombuffer, 或frombytes方法從數(shù)據(jù)中創(chuàng)建圖像。

保存圖像

你可以使用save方法來保存圖像吵瞻,像這樣葛菇。

image.save('boat.png')

該函數(shù)將使用文件擴(kuò)展名來決定使用哪種文件格式,所以在上面的例子中它將創(chuàng)建一個(gè)PNG文件听皿。

你可以指定一種格式熟呛。

image.save('boat.png', format=PNG)

這將以PNG格式存儲(chǔ)圖像宽档,而不管文件擴(kuò)展名是什么尉姨。如果你想用非標(biāo)準(zhǔn)的擴(kuò)展名來存儲(chǔ)圖像(例如.dat而不是.png),這很有用吗冤。

除了文件名又厉,你也可以提供以寫模式打開的文件對(duì)象。在這種情況下椎瘟,你應(yīng)該提供格式參數(shù)覆致,因?yàn)镻illow不知道目標(biāo)文件名。

圖像生成器

Pillow自帶了一些隨機(jī)圖像生成器函數(shù)肺蔚。

除了effect_mandelbro煌妈,effect_noise生成噪聲圖像。

noise = Image.effect_noise(size=(256, 256), sigma=32)

圖像大小為256×256像素,圖像被填充高斯噪聲璧诵,根據(jù)高斯分布將每個(gè)像素設(shè)置為0到255之間的隨機(jī)值汰蜘,以128為中心。西格瑪值控制著數(shù)值的分散程度之宿。

linear_gradient創(chuàng)建從0到255(黑到白)的梯度圖像族操。圖像大小固定為256像素的正方形,所以唯一的參數(shù)是模式比被。它必須是一個(gè)灰度模式色难,所以明顯的選擇是'L'。你也可以使用'P'來創(chuàng)建一個(gè)基于調(diào)色板的灰度圖像等缀。

image = Image.linear_gradient('L')

radial_gradient可以用來創(chuàng)建徑向梯度枷莉。

image = Image.radial_gradient('L')

處理圖像帶

在RGB圖像中,每個(gè)像素都包含紅色尺迂、綠色和藍(lán)色分量依沮。在Pillow中,這些分量被稱為帶枪狂。

getbands

getbands方法返回包含圖像中每個(gè)帶的單字母名稱的元組危喉。

bands = image.getbands()

對(duì)于一個(gè)RGB圖像,該函數(shù)返回('R', 'G', 'B')州疾。對(duì)于RGBA圖像辜限,它返回('R', 'G', 'B', 'A'),以此類推严蓖。

分割

split方法將圖像分割成多個(gè)圖像薄嫡,每個(gè)圖像包含原圖像的一個(gè)頻段。

red_image, green_image, blue_image = image.split()

原始圖像被分割成3個(gè)部分颗胡。red_image是一個(gè)灰度圖像毫深,只包含圖像的紅色部分,green_image和blue_image的情況類似毒姨。

在這個(gè)圖像中哑蔫,暗區(qū)是圖像中含有很少紅色的部分,亮區(qū)是圖像中含有大量紅色的部分弧呐。

merge

merge功能的作用與分割相反闸迷。它取幾個(gè)單頻帶圖像,并將其合并形成彩色圖像俘枫。

mixed_image = Image.merge('RGB', [red_image, green_image, blue_image])

上面的代碼合并了我們之前創(chuàng)建的三個(gè)波段腥沽,所以它將產(chǎn)生與原始圖像相同的圖像。

blank = Image.new('L', image.size)
red_sep = Image.merge('RGB', [red_image, blank, blank])
red_sep.save('red_sep.png')

getchannel

如果你只想要波段鸠蚪,getchannel也可以今阳。

red_image = image.getchannel('R')

波段可以通過名稱(如'R'师溅、'G'、'B'盾舌,因?yàn)樗鼈兂霈F(xiàn)在getbands中)或索引號(hào)(0险胰、1、2...)來識(shí)別矿筝。

putalpha

putalpha方法可以用來給圖像添加alpha帶(或者替換當(dāng)前的alpha帶起便,如果已經(jīng)有)。這是一個(gè)為現(xiàn)有圖像添加透明度的好方法窖维。

在這個(gè)例子中榆综,我們將使用一個(gè)漸變色(radial gradient)作為我們的alpha通道。

以下是將這個(gè)圖像作為alpha通道應(yīng)用到船形圖像的代碼铸史。

vignette_image = Image.open('vignette.png').getchannel(0)
image.putalpha(vignette_image)

vignette圖像是一個(gè)RGB圖像鼻疮,但我們需要單波段的圖像作為putalpha。這沒有問題琳轿,我們可以簡(jiǎn)單地使用getchannel(0)來提取第一個(gè)波段判沟。

putalpha將漸變體作為alpha通道添加到圖像中。這就把圖像從RGB轉(zhuǎn)換為RGBA崭篡。這里是結(jié)果的圖像挪哄。

圖像的邊緣漸漸消失了--這是因?yàn)樗絹碓酵该鳎园醉擄@示出來了琉闪。

參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市颠毙,隨后出現(xiàn)的幾起案子斯入,更是在濱河造成了極大的恐慌,老刑警劉巖蛀蜜,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刻两,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡滴某,警方通過查閱死者的電腦和手機(jī)磅摹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壮池,“玉大人偏瓤,你說我怎么就攤上這事∫铮” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵赔退,是天一觀的道長橙依。 經(jīng)常有香客問我证舟,道長,這世上最難降的妖魔是什么窗骑? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任女责,我火速辦了婚禮,結(jié)果婚禮上创译,老公的妹妹穿的比我還像新娘抵知。我一直安慰自己,他們只是感情好软族,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布刷喜。 她就那樣靜靜地躺著,像睡著了一般立砸。 火紅的嫁衣襯著肌膚如雪掖疮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天颗祝,我揣著相機(jī)與錄音浊闪,去河邊找鬼。 笑死螺戳,一個(gè)胖子當(dāng)著我的面吹牛搁宾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播倔幼,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼猛铅,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤量蕊,失蹤者是張志新(化名)和其女友劉穎呕诉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骡男,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疙筹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡禁炒,死狀恐怖而咆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情幕袱,我是刑警寧澤暴备,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站们豌,受9級(jí)特大地震影響涯捻,放射性物質(zhì)發(fā)生泄漏浅妆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一障癌、第九天 我趴在偏房一處隱蔽的房頂上張望凌外。 院中可真熱鬧,春花似錦涛浙、人聲如沸康辑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疮薇。三九已至,卻和暖如春哀托,著一層夾襖步出監(jiān)牢的瞬間惦辛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工仓手, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胖齐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓嗽冒,卻偏偏與公主長得像呀伙,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子添坊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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