本篇內(nèi)容主要講解“Python圖像處理之PIL庫(kù)怎么使用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Python圖像處理之PIL庫(kù)怎么使用”吧!
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了宿城免費(fèi)建站歡迎大家使用!
要點(diǎn):PIL庫(kù)是一個(gè)具有強(qiáng)大圖像處理能力的第三方庫(kù),不僅包含了豐富的像素、色彩操作功能,還可以用于圖像歸檔和批量處理。
PIL(Python Image Library)庫(kù)是Python語(yǔ)言的第三方庫(kù),需要通過(guò)pip工具安裝。安裝PIL庫(kù)的方法如下,需要注意,安裝庫(kù)的名字是pillow。
:\>pip install pillow #或者 pip3 install pillow
PIL庫(kù)支持圖像存儲(chǔ)、顯示和處理,它能夠處理幾乎所有圖片格式,可以完成對(duì)圖像的縮放、剪裁、疊加以及向圖像添加線條、圖像和文字等操作。
PIL庫(kù)主要可以實(shí)現(xiàn)圖像歸檔和圖像處理兩方面動(dòng)能需求
(1)圖像歸檔:對(duì)圖像進(jìn)行批處理、生成圖像預(yù)覽、圖像格式轉(zhuǎn)換等。
(2)圖像處理:圖像基本處理、像素處理、顏色處理等。
根據(jù)功能不同,PIL庫(kù)共包括21個(gè)與圖片相關(guān)的類,這些類可以被看作是子庫(kù)
或PIL庫(kù)中的模塊,子庫(kù)列表如下。
Image、 ImageChops、 ImageColor、 ImageCrackCode、 ImageDraw.ImageEnhance、 ImageFile、 ImageFilelO、 ImageFilter、 ImageFont、ImageGL、 ImageGrab、 Imagemath、 ImageOps、 ImagePalette、 ImagePath.ImageQt、 ImageSequence、 ImageStat ImageTk, ImageWin
重點(diǎn)介紹PIL庫(kù)最常用的子庫(kù):Image、ImageFilter、ImageEnhance。
Image是PIL最重要的類,它代表一張圖片,引入這個(gè)類的方法如下:
>>>from PIL import Image
在PIL中,任何一個(gè)圖像文件都可以用Image對(duì)象表示。Image類的圖像讀取和創(chuàng)建方法如下(共5個(gè)):
方法 | 描述 |
---|---|
Image.open(filename) | 根據(jù)參數(shù)加載圖像文件 |
Image.new(mode, size, color) | 根據(jù)給定參數(shù)創(chuàng)建一個(gè)新的圖像 |
Image.open(StringlO.StringlO(buffer)) | 從字符串中獲取圖像 |
Image.frombytes(mode, size, data) | 根據(jù)像素點(diǎn)data 創(chuàng)建圖像 |
Image.verify() | 對(duì)圖像文件完整性進(jìn)行檢查、返回異常 |
通過(guò)Image打開(kāi)圖像文件時(shí),圖像的柵格數(shù)據(jù)不會(huì)被直接解碼或者加載,程序只是讀取了圖像文件頭部的元數(shù)據(jù)信息,這部分信息標(biāo)識(shí)了圖像的格式、顏色、大小等。因此,打開(kāi)一個(gè)文件會(huì)十分迅速,與圖像的存儲(chǔ)和壓縮方式無(wú)關(guān)。
要加載一個(gè)圖像文件,最簡(jiǎn)單的形式如下,之后所有操作對(duì)im起作用。
>>>from PIL import Image>>>im = Image.open ("a.jpg")
在使用IDLE交互方式處理圖片文件時(shí),建議采用文件的全路徑;如果使用Python文件形式,建議采用相對(duì)路徑,將文件和程序放到一個(gè)目錄中。
Image類有4個(gè)處理圖片的常用屬性,如表所示(共4個(gè))
屬性 | 描述 |
---|---|
Image.format | 標(biāo)識(shí)圖像格式或來(lái)源,如果圖像不是從文件讀取,值為None |
Image.mode | 圖像的色彩模式,"L"為灰度圖像、"RGB”為真彩色圖像、"CMYK”為出版圖像 |
Image.size | 圖像蜜度和高度,單位是像素(px),返回值是二元元組(tuple) |
Image.palette | 調(diào)色板屬性,返回一個(gè)ImagePalette類型 |
查看已經(jīng)讀取的圖像文件的屬性如下:
>>>print (im. format, im.size, im.mode)JPEG (900, 598) RGB
Image還能讀取序列類圖像文件,包括GIF、FLI、FLC、TIFF等格式文件。open()方法打開(kāi)一個(gè)圖像時(shí)自動(dòng)加載序列中的第一幀,使用seek()和tell()方法可以在不同幀之間移動(dòng)。
Image類的序列圖像操作方法(共2個(gè)):
方法 | 描述 |
---|---|
Image.seek(frame) | 跳轉(zhuǎn)并返回圖像中的指定幀 |
Image.tell() | 返回當(dāng)前幀的序號(hào) |
【實(shí)例1】GIF文件圖像提取
對(duì)一個(gè)GIF格式動(dòng)態(tài)文件,提取其中各幀圖像,并保存為文件。
from PIL import Image#讀入一個(gè)GIF文件im = Image.open("pybit.gif")try: im.save('picframe{:02d).png'.format(im.tell())) while True: im.seek(im.tel1 ()+1) im.save('picframe{:02d).png'.format(im.tell()))except:print("處理結(jié)束")
實(shí)例1展示了一種采用try-except編寫(xiě)程序的方法,通過(guò)seek()方法和save()方法配合提取GIF圖像格式的每一幀,并保存為文件。
Image類的圖像轉(zhuǎn)換和保存方法 (共3個(gè)) 如表所示。
方法 | 描述 |
---|---|
Image.save(filename, format) | 將圖像保存為filename文件名,format是圖片格式 |
Image.convert(mode) | 使用不同的參數(shù),轉(zhuǎn)換圖像為新的模式 |
Image.thumbnail(size) | 創(chuàng)建圖像的縮略圖,size是縮略圖尺寸的二元元組 |
其中,save()方法有兩個(gè)參數(shù):文件名filename和圖像格式format。如果調(diào)用時(shí)不指定保存格式,如微實(shí)例1,PIL將自動(dòng)根據(jù)文件名filename后綴存儲(chǔ)圖像;如果指定格式,則按照格式存儲(chǔ)。搭配采用open()和save()方法可以實(shí)現(xiàn)圖像的格式轉(zhuǎn)換,例如,將 jpg格式轉(zhuǎn)換為png格式」代碼如下。需要注意,Image 類的 save()方法主要用于保存文件到硬盤(pán),PIL庫(kù)還提供了功能更強(qiáng)大的格式轉(zhuǎn)換方法。
im = Image.open("a.jpg")im.save("a.png")
Image類可以縮放和旋轉(zhuǎn)圖像,其中,rotate(方法以逆時(shí)旋轉(zhuǎn)的角度值作為參數(shù)來(lái)旋轉(zhuǎn)圖像。
Image類的圖像旋轉(zhuǎn)和縮放方法(共2個(gè)):
方法 | 描述 |
---|---|
Image.resize(size) | 按size大小調(diào)整圖像,生成副本 |
Image.rotate(angle) | 按angle角度旋轉(zhuǎn)圖像,生成副本 |
Image類能夠?qū)γ總€(gè)像素點(diǎn)或者一幅RGB圖像的每個(gè)通道單獨(dú)進(jìn)行操作。split()方法能夠?qū)GB 圖像各顏色通道提取出來(lái);
merge()方法能夠?qū)⒏鳘?dú)立通道再合成一幅新的圖像。
lmage類的圖像像素和通道處理方法(共4個(gè)):
方法 | 描述 |
---|---|
Image.point(func) | 根據(jù)函數(shù)func的功能對(duì)每個(gè)元素進(jìn)行運(yùn)算,返回圖像副本 |
Image.split() | 提取RGB圖像的每個(gè)顏色通道,返回圖像副本 |
Image.merge(mode,bands) | 合并通道,其中mode表示色彩,bands表示新的色彩通道 |
Image.blend(im1,im2,alpha) | 將兩幅圖片iml和im2按照如下公式插值后生成新的圖像:im1 (1.0-alpha) + im2 alpha |
【實(shí)例2】圖像的顏色交換
交換圖像中的顏色??梢酝ㄟ^(guò)分離RGB圖片的3個(gè)顏色通道實(shí)現(xiàn)顏色交換。
from PIL import Imageim = Image.open('a.jpg')r, g, b = im.split()om = Image.merge("RGB" , (b, g, r))om.save('aBGR.jpg')
操作圖像的每個(gè)像素點(diǎn)需要通過(guò)函數(shù)實(shí)現(xiàn),可以采用(lambda)函數(shù)和point()方法,例子如下,顯示效果如圖7所示。
>>>im=Image.apen('a.jpg')#打開(kāi)文件>>>>r,g,b=im.splitO#獲得RGB通道數(shù)據(jù)>>>>newg=g.point(lambda i:i*0.9)#將G通道顏色值變?yōu)樵瓉?lái)的0.9>>>>newb=b.point(lambda i:i<100)#選擇B通道值(低于100的像素>>>>om=Image.merge(im.mode,(r,newg,newb)#將3個(gè)通道合成為新圖>>>>om.save('new_a.jpg')#輸出圖片
PIL庫(kù)的ImageFilter類和ImageEnhance類提供了過(guò)濾圖像和增強(qiáng)圖像的方法。
ImageFilter類共提供10種預(yù)定義圖像過(guò)濾方法(共10個(gè)):
方法表示 | 描述 |
---|---|
ImageFilter.BLUR | 圖像的模糊效果 |
ImageFilter.CONTOUR | 圖像的輪廓效果 |
ImageFilter.DETAIL | 圖像的細(xì)節(jié)效果 |
ImageFilter.EDGE_ENHANCE | 圖像的邊界加強(qiáng)效果 |
ImageFilter.EDGE_ENHANCE_MORE | 圖像的閾值邊界加強(qiáng)效果 |
ImageFilter.EMBOSS | 圖像的浮雕效果 |
ImageFilter.SMOOTHL | 圖像的平滑效果 |
ImageFilter.FIND_EDGES | 圖像的邊界效果 |
ImageFilter.SMOOTH_MORE | 圖像的閾值平滑效果 |
ImageFilter.SHARPEN | 圖像的銳化效果 |
利用Image類的filter()方法可以使用ImageFilter類,使用方式如下:
Image.filter(ImageFilter.fuction)
【實(shí)例3】圖像的輪廓獲取。
獲取圖像的輪廓,代碼如下,程序執(zhí)行效果如圖所示,圖片變得更加抽象、更具想象空間!
from PIL import Imagefrom PIL import ImageFilterim = Image.open('a.jpg')om = im.filter(ImageFilter.CONTOUR)om.save('aContour.jpg')
ImageEnhance類提供了更高級(jí)的圖像增強(qiáng)功能,如調(diào)整色彩度、亮度、對(duì)比度、銳化等。
ImageEnhance類的圖像增強(qiáng)和濾鏡方法(共5個(gè)):
方法 | 描述 |
---|---|
ImageEnhance.enhance(factor) | 對(duì)選擇屬性的數(shù)值增強(qiáng)factor倍 |
ImageEnhance.Color(im) | 調(diào)整圖像的顏色平衡 |
ImageEnhance.Contrast(im) | 調(diào)整圖像的對(duì)比度 |
ImageEnhance.Brightness(im) | 調(diào)整圖像的亮度 |
ImageEnhance.Sharpness(im) | 調(diào)整圖像的銳度 |
【實(shí)例4】圖像的對(duì)比度增強(qiáng)。
增強(qiáng)圖像的對(duì)比度為初始的20倍。代碼如下,程序執(zhí)行效果如圖7所示。
from PIL import Imagefrom PIL import ImageEnhanceim = Image.open('a.jpg')om = ImageEnhance.Contrast(im)om.enhance(20).save(aEnContrast.jpg')
到此,相信大家對(duì)“Python圖像處理之PIL庫(kù)怎么使用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
分享名稱:Python圖像處理之PIL庫(kù)怎么使用
文章分享:http://vcdvsql.cn/article20/pepojo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、App開(kāi)發(fā)、小程序開(kāi)發(fā)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)