python PIL的學習及其應用


PIL庫是一個具有強大圖像處理能力的第三方庫,不僅包含了豐富的像素、色彩操作功能,還可以用於圖像歸檔和批量處理。

PIL庫的安裝

:\>pip install pillow #或者 pip3 install pilow

根據功能不同,PIL庫共包括了21個模塊:

Image, ImageChops, ImageColor, ImageCrackCode, ImageDraw.
ImageEnhance, ImageFile, ImageFilelO, ImageFilter, ImageFont.
ImageGL、 ImageGrab, Imagemath, ImageOps, ImagePalette, ImagePath.
ImageOt, ImageSequence, ImageStat, ImageTk, ImageWin

在下面重點介紹PIL庫幾個最常用的子庫:

Image庫

Image是PIL最重要的類,它代表一張圖片,引入這個類的方法如下:

 

from PIL import Image

 

Image 類的圖像讀取和創建方法如下表:

               方法

                 描述

Image.open(filename)

根據參數加載圖像文件

Image.new(mode,size,color)

根據給定參數創建一個新的圖像

Image.open(StringIO.StringIO(buffer))

從字符串中獲得圖像
Image.frombytes(mode.size,data)

根據像素點data創建圖像

Image.verify()

對圖像文件完整性進行檢查,返回異常

 

 

 

 

 

 

 

 

 

 

 

 

 

要加載一個圖像文件,最簡單的方式如下:

from PIL import Image
im=Image.open("C:\\Users\\Administrator\\Desktop\\cyhz.jpg")

 

Image 類有四個處理圖片的常用屬性,如下表:

 

屬性

 描述

Image.format

標識圖像格式或來源,如果圖像不是從文件中讀取,值為None

Image.mode

圖像的色彩模式,”L“為灰度圖像、”RGB“為真彩色圖像、”CMYK“為出版圖像

Image.size

圖像的寬度和高度,單位是像素,返回值是二元元組

Image.palette

調色板屬性,返回一個ImagePalette類型

 

 

 

 

 

 

 

 

 

 

 

查看上面所打開圖像文件的屬性如下:

print(im.format,im.size,im.mode)

 

Image 還能讀取序列類圖像文件,包括GIF、FLI、FLC、TIFF等格式文件。

Image 類的序列圖像操作方法如下表:

方法

描述

Image.seek(frame)

跳轉並返回圖像中的指定幀

Image.tell()

放回當前幀的序號

 

 

 

 

 

 

 

 

Image類的圖像轉換和保存方法如下表:

方法

描述

Image.save(filename,format)

將圖像保存為filename文件名,format是圖片格式

Image.convert(mode)

使用不同的參數,轉換圖像為新的模式

Image.thumbnail(size)

創建圖像的縮略圖,size是縮略圖尺寸的二元元組

 

 

 

 

 

 

 

 

 

Image類的圖像旋轉和縮放方法如下表:

方法

描述

Image.resize(size)

按size大小調整圖像,生成副本

Image.rotate(angle)

按angle角度旋轉圖像,生成副本

 

 

 

 

 

 

 

Image類的圖像像素和通道處理方法如下表:

方法

描述

Image.point(func)

根據函數func的功能對每個元素進行運算,返回圖像副本

Image.split()

提取RGB圖像的每個顏色通道,返回圖像副本

Image.merge(mode,bands)

合並通道,其中mode表示色彩,bands表示新的色彩通道
Image.blend(im1,im2,alpha)

將兩幅圖片im1和im2按照如下公式插值后生成新的圖像:

im1 *(1.0-alpha) + im2 *alpha

 

 

 

 

 

 

 

 

 

 

 

 

ImageFilter 庫和ImageEnhance 庫

PIL庫的ImageFilter類和ImageEnhance類提供了過濾圖像和增強圖像的方法。

ImageFilter類的預定義圖像過濾方法如下表:

方法表示

描述

ImageFilter.BLUR

圖像的模糊效果

ImageFilter.CONTOUR

圖像的輪廓效果

ImageFilter.DETAIL

圖像的細節效果

ImageFilter.EDGE_ENHANCE

圖像的邊界加強效果

ImageFilter.EDGE_ENHANCE_MORE

圖像的閾值邊界加強效果

ImageFilter.EMBOSS

圖像的浮雕效果

ImageFilter.FIND_EDGES

圖像的邊界效果

ImageFilter.SMOOTH

圖像的平滑效果

ImageFilter.SMOOTH_MORE

圖像的閾值平滑效果

ImageFilter.SHARPEN

圖像的銳化效果

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ImageEnhance類提供了更高級的圖像增強功能,如下表所示:

方法 描述

ImageEnhance.enhance(factor)

對選擇屬性的數值增強factor倍

ImageEnhance.Color(im)

調整圖像的顏色平衡

ImageEnhance.Contrast(im)

調整圖像的對比度

ImageEnhance.Brightness(im)

調整圖像的亮度

ImageEnhance.Sharpness(im)

調整圖像的銳度

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上就是PIL庫比較重要的幾個子庫的介紹,接下來將用其應用到實際例子上。

1、對圖片進行縮略,生成縮略圖,代碼如下:

from PIL import Image
im=Image.open("C:\\Users\\Administrator\\Desktop\\cyhz.jpg")
im.thumbnail((128,128))
im.save("cyhzslt","JPEG")

2、改變圖像的顏色,代碼如下:

from PIL import Image
im=Image.open("C:\\Users\\Administrator\\Desktop\\lyslt.jpg")
r,g,b=im.split()
om= Image.merge("RGB",(b,g,r))
om.save("C:\\Users\\Administrator\\Desktop\\ly1.jpg")

與原圖對比(左邊為原圖,右邊為改變顏色后的圖):

 

 

3、對圖片進行輪廓處理,代碼如下:

from PIL import Image
from PIL import ImageFilter
im=Image.open("C:\\Users\\Administrator\\Desktop\\cyhzslt.jpg")
om=im.filter(ImageFilter.CONTOUR)
om.save("C:\\Users\\Administrator\\Desktop\\ly3.jpg")

 

 

對比如下(左圖為原圖,右圖為輪廓圖):

 

 

 

 4、對圖片進行浮雕操作處理,代碼如下:

from PIL import Image
from PIL import ImageFilter
im=Image.open("C:\\Users\\Administrator\\Desktop\\lyslt.jpg")
om=im.filter(ImageFilter.EMBOSS)
om.save("C:\\Users\\Administrator\\Desktop\\ly5.jpg")

對比如下(左圖為原圖,右圖為輪廓圖):

 

 

 

5、對一個GIF格式動態文件,提取其中各幀圖像,並保存為文件,代碼如下:

from PIL import Image
im = Image.open('C:\\Users\\Administrator\\Desktop\\timg.gif')      # 讀入一個GIF文件
try:
    im.save('aa{:02d}.png'.format(im.tell()))
    while True:
        im.seek(im.tell()+1)
        im.save('aa{:02d}.png'.format(im.tell()))
except:
    print("處理結束")

 動圖如圖:

提取各幀圖像的結果為:

 

 

6、增強圖像的銳度,代碼為:

from PIL import Image
from PIL import ImageEnhance
im = Image.open('C:\\Users\\Administrator\\Desktop\\lyslt.jpg')
om=ImageEnhance.Sharpness(im)
om.enhance(20).save('C:\\Users\\Administrator\\Desktop\\sad.jpg')

效果為(左圖為原圖,右圖為增強20倍銳度):

 

 

7、生成一個好玩的GIF圖,代碼如下:

import PIL.Image as Image
def get_gif(pics_dir,n,t=0.1):
    imgs = []
    for i in range(n):
        pic_name = '{}\\{}.jpg'.format(pics_dir,i+1)
        temp = Image.open(pic_name)
        imgs.append(temp)
    save_name = '{}.gif'.format(pics_dir)
    imgs[0].save(save_name, save_all=True, append_images=imgs, duration=t)
    return save_name
if __name__ == '__main__':
    pics_dir = 'C:\\Users\\Administrator\\Desktop\\我'
    save_name = get_gif(pics_dir,6,900)
    print('制作完成。所屬文件:{}'.format(save_name))

 生成GIF用了18張圖片如圖:

 

生成的GIF的效果如下圖:

 

 

以上就是一些關於PIL庫的應用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM