Python PIL PIL (Python Image Library) 庫是Python 語言的一個第三方庫,PIL庫支持圖像存儲、顯示和處理,能夠處理幾乎所有格式的圖片。 一、PIL庫簡介 1. PIL庫主要有2個方面的功能: (1) 圖像歸檔:對圖像進行批處理、生產圖像預覽、圖像格式轉換等。 ...
Python PIL
PIL (Python Image Library) 庫是Python 語言的一個第三方庫,PIL庫支持圖像存儲、顯示和處理,能夠處理幾乎所有格式的圖片。
一、PIL庫簡介
1. PIL庫主要有2個方面的功能:
(1) 圖像歸檔:對圖像進行批處理、生產圖像預覽、圖像格式轉換等。
(2) 圖像處理:圖像基本處理、像素處理、顏色處理等。
2. PIL擁有多個類,此處就其中的Image類、ImageFilter類、ImageEnhance類做簡單介紹。
二、安裝庫函數
pip install pillow
註:由於本機已經安裝了PIL庫(安裝時使用pillow),所以以更新為例,使用 -U 標簽可實現更新。
三、使用庫函數Image類 —— 基本圖像處理
1. 調用Image類
from PIL import Image
2. Image類關於圖像讀取與創建
方法 |
說明 |
Image.open(filename) |
載入圖像文件 |
Image.new(mode,size,color) |
根據給定參數創建新圖像 |
Image.open(StringIO.StringIO(buffer)) |
從字元串中獲取圖像 |
Image.frombytes(mode,size,color) |
根據像素點創建新圖像 |
Image.verify() |
對圖像完整性進行檢查,返回異常 |
3. Image類的常用屬性
方法 |
說明 |
Image.format |
圖像格式或來源,若圖像不是從文件讀取,返回None |
Image.mode |
圖像的色彩模式,’L’為灰度模式,’RGB’為真彩色圖像,’C(青)M(品紅)Y(黃)K(黑)’為出版圖像 |
Image.size |
圖像的寬度和高度,單位是像素(px),返回值為元組類型 |
Image.palette |
調色板屬性,返回ImagePalette類型 |
4.Image類的序列圖像操作方法
方法 |
說明 |
Image.seek(frame) |
跳轉並返回圖像中的指定幀 |
Image.tell() |
返回當前幀的序號 |
5.Image類的圖像旋轉和縮放方法
方法 |
說明 |
Image.resize(size) |
返回按size大小調整圖像的副本 |
Image.rotate(angle) |
返回按angle角度旋轉圖像的副本 |
6.Image類的圖像轉換和保存方法
方法 |
說明 |
Image.save(filename,format) |
將圖像保存為filename文件名,format格式 |
Image.convert(mode) |
將圖像轉換為mode模式 |
Image.thumbnail(size) |
創建圖像的縮略圖,size是縮略圖尺寸的元組 |
Example_1:
# -*- encoding:utf-8 -*- ''' 改變顏色 --- 顏色反轉''' from PIL import Image nest = Image.open("D:\\nest.jpg") r,g,b = nest.split() #獲取原圖的RGB通道的顏色值 newb = b.point(lambda i:i*1.1) #將B通道的顏色值增強 nest1 = Image.merge(nest.mode,(b,g,r)) nest1.thumbnail((400,254)) #創建縮略圖 nest1.save("D:\\nest_2.jpg")
原圖與效果圖對比:
7.Image類的圖像像素和通道處理方法
方法 |
說明 |
Image.point(func) |
根據函數func的功能對每個元素進行運算,返回圖像副本 |
Image.split() |
根據GRB圖像的每個顏色通道,返回圖像副本 |
Image.merge(mode,bands) |
合成通道,其中mode為色彩,bands為新的色彩通道 |
Image.blend(im1,im2,alpha) |
將2張圖片im1和im2按照公式插值後生成新圖像 公式:im1*(1.0 - alpha) + im2*alpha |
四、使用庫函數ImageFilter類 —— 圖像過濾
1.調用ImageFilter類
from PIL import ImageFilter
2. 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 |
圖像的銳化效果 |
Example_2:
# -*- encoding:utf-8 -*- ''' 輪廓效果 --- 素描 ''' from PIL import Image from PIL import ImageFilter square = Image.open("D:\\square.jpg") square1 = square.filter(ImageFilter.CONTOUR) #選擇輪廓效果 square1.save("D:\\square0.jpg")
原圖:
效果圖:
五、使用庫函數ImageEnhance類 —— 圖像增強
1. 調用ImageEnhance類
from PIL import ImageEnhance
2.ImageEnhance類圖像增強與濾鏡方法
方法 |
說明 |
ImageEnhance.enhance(factor) |
對所選屬性的數值增強factor倍 |
ImageEnhance.Color(im) |
調整圖像的顏色平衡 |
ImageEnhance.Contrast(im) |
調整圖像的對比度 |
ImageEnhance.Brightness(im) |
調整圖像的亮度 |
ImageEnhance.Sharpness(im) |
調整圖像的銳度 |
Example_3:
# -*- encoding:utf-8 -*- ''' 亮度增強 --- 曝光 ''' from PIL import Image from PIL import ImageEnhance gz = Image.open("D:\\gz.jpg") gz1 = ImageEnhance.Brightness(gz) #選擇亮度 gz1.enhance(2).save("D:\\gz1.jpg") #將亮度增強2倍後保存
原圖對比效果圖:
Example_4:
# -*- encoding:utf-8 -*- ''' 製作GIF圖 ''' import imageio savename = "D:\\my.gif" #準備製作的圖像名稱 filenames = ["D:\\3.jpg","D:\\2.jpg","D:\\1.jpg","D:\\01.jpg","D:\\02.jpg","D:\\03.jpg","D:\\04.jpg"] frames = [] for name in filenames: frames.append(imageio.imread(name)) imageio.mimsave(savename,frames,'GIF',duration=1)