ImageEnhance 模塊
內置的 ImageEnhance 模塊中包含了多個用于增強圖像效果的函數,主要用來調整圖像
的色彩、對比度、亮度和清晰度等,感覺上和調整電視機的顯示參數一樣。
在模塊 ImageEnhance 中,所有的圖片增強對象都實現一個通用的接口。這個接口只包
含如下一個方法。
方法 enhance()會返回一個增強的 Image 對象,參數 factor 是一個大于 0 的浮點數,1 表
示返回原始圖片。
當在 Python 程序中使用模塊 ImageEnhance 增強圖像效果時,需要首先創建對應的增強
調整器,然后調用調整器輸出函數,根據指定的增強系數(小于 1 表示減弱,大于 1 表示增
強,等于 1 表示原圖不變)進行調整,最后輸出調整后的圖像。
在模塊 ImageEnhance 中,常用的內置函數如下所示:
(1)ImageEnhance.Color(image ):功能是調整圖像色彩平衡,相當于彩色電視機的色彩調整,實現了上邊提到的接口的enhance 方法。
(2)ImageEnhance.Contrast(image ):功能是調整圖像對比度,相當于彩色電視機的對比度調整。
(3)ImageEnhance.Brightness(image ):功能是調整圖像亮度。
(4)ImageEnhance.Sharpness(image ):功能是調整圖像清晰度,用于銳化/鈍化圖片。
銳化操作的 factor 是 0~2 之間的一個浮點數。當 factor=0 時,返回一個模糊的圖片對象;當 factor=2 時,返回一個銳化的圖片對象;當 factor=1 時,返回原始圖片對象。
銳化(Sharpening):
銳化是一種圖像處理技術,旨在增強圖像中的細節和邊緣,使它們看起來更清晰和更突出。
銳化通過增強圖像中像素之間的對比度來實現,從而使邊緣更加清晰。這通常會使圖像看起來更加清晰。
銳化通常用于強調圖像中的細節,使圖像看起來更加清晰和有視覺沖擊力。
鈍化(Blurring):
鈍化是一種圖像處理技術,旨在減少圖像中的細節和邊緣的清晰度,使其看起來更加模糊或柔和。
鈍化通過模糊圖像中的像素來實現,從而減少細節和邊緣的清晰度。這通常用于柔化圖像或減少噪點。
鈍化可以用于減輕圖像中的噪聲、平滑皮膚紋理或創建藝術效果。
因此,銳化和鈍化都是常見的圖像處理技術,用于改變圖像的外觀和細節水平。選擇使用哪種處理取決于您想要實現的效果以及圖像的特定要求
ImageDraw 模塊
ImageDraw 模塊實現了繪圖功能。可以通過創建圖片的方式來繪制 2D 圖像;還可以在原有的圖片上進行繪圖,已達到修飾圖片或對圖片進行注釋的目的。
在 ImageDraw 模塊繪圖時需要首先創建一個 ImageDraw.Draw 對象,并且提供指向文件的參數。然后引用創建的 Draw 對象方法進行繪圖。最后保存或直接輸出繪制的圖像。
drawObject=ImageDraw.Draw(black)
繪制直線
表示以(x1,y1)為起始點,以(x2,y2)為終止點畫一條直線。[x1,y1,x2,y2]也可以寫為(x1,y1,x2,y2)、[(x1,y1),(x2,y2)]等;fill 用于設置指定線條顏色;width 設置線條的寬度;joint表示一系列線之間的聯合類型。它可以是“曲線”。
drawObject.line([x1,y1,x2,y2],fill = None,width = 0,joint = None )
繪制圓弧
在左上角坐標為(x1,y1),右下角坐標為(x2,y2)的矩形區域內,滿圓 O 內,以 start 為起始角度,以 end 為終止角度,截取圓 O 的一部分圓弧并畫出來。如果[x1,y1,x2,y2]區域不是正方形,則在該區域內的最大橢圓中根據角度截取片段。參數 fill 和 width 與 line 方法相
同。
drawObject.arc([x1,y1,x2,y2],start,end,fill = None,width = 0 )
繪制橢圓
drawObject.ellipse([x1,y1,x2,y2],fill = None,outline = None,width = 0 )
繪制弦
drawObject.chord([x1,y1,x2,y2],start,end,fill = None,outline = None,width = 0 )
用法同 arc 類似,用于畫圓中從 start 到 end 的弦。fill 表示弦與圓弧之間空間用指定顏色填滿,設置為 outline 表示只規定弦線的顏色。
繪制扇形
drawObject.pieslice([x1,y1,x2,y2],start,end,fill = None,outline = None,width = 0 )
用法同 elipse 類似,用于畫起止角度間的扇形區域。fill 表示將扇形區域用指定顏色填
滿,設置為 outline 表示只用指定顏色描出區域輪廓。
繪制多邊形
drawObject.polygon([x1,y1,x2,y2,…],fill = None,outline = None )
根據坐標畫多邊形,Python 會根據第一個參量中的(x,y)坐標對,連接出整個圖形。
fill 表示將多邊形區域用指定顏色填滿,outline 只用于設置指定顏色描出區域輪廓。
繪制矩形
drawObject.rectangle([x1,y1,x2,y2],fill = None,outline = None,width = 0 )
在指定的區域內畫一個矩形,(x1,y1)表示矩形左上角的坐標,(x2,y2)表示矩形右
下角的坐標。fill 用于將矩形區域顏色填滿,outline 用于描出區域輪廓。
繪制矩形
drawObject.rectangle([x1,y1,x2,y2],fill = None,outline = None,width = 0 )
在指定的區域內畫一個矩形,(x1,y1)表示矩形左上角的坐標,(x2,y2)表示矩形右
下角的坐標。fill 用于將矩形區域顏色填滿,outline 用于描出區域輪廓。
繪制文字
drawObject.text(position,text,fill = None,font = None,anchor = None,spacing = 0,
align =“left”,direction = None,features = None,language = None )
在圖像內添加文字。其中參數 position 是一個二元組,用于指定文字左上角的坐標;text
表示要寫入的文字內容;fill 表示文本的顏色;font 必須為 ImageFont 中指定的 font 類型;
spacing 表示行之間的像素數;align 表示位置“left”,“center”或“right”;direction 表示文字的方向。它可以是’rtl’(從右到左),‘ltr’(從左到右)或’ttb’(從上到下)。
from PIL import Image, ImageDraw
img = Image.open("lena.jpg")
draw = ImageDraw.Draw(img)
width, height = img.size
draw.arc( (0, 0, width-1, height-1), 0, 360, fill='blue')
img.save("circle.jpg")
ImageFont 模塊
ImageFont 的功能是實現對字體和字型的處理。比較常用的內置函數如下所示:
(1)load():從指定的文件中加載一種字體,該函數返回對應的字體對象。如果該函數運行
失敗,那么將產生 IOError 異常。語法格式如下:
ImageFont.load(文件名)
(2)load_path():和函數 load()一樣,但是如果沒有指定當前路徑,就會從文件 sys.path 開
始查找指定的字體文件。語法格式如下:
ImageFont.load_path(文件名)
(3)truetype():有兩種定義格式。第 1 種格式的功能是加載一個 TrueType 或者 OpenType
字體文件,并且創建一個字體對象。在 Windows 系統中,如果指定的文件不存在,加載器就會順便看看 Windows 的字體目錄下它是否存在。語法格式如下:
ImageFont.truetype(file,size)
第 2 種格式的功能是,加載一個 TrueType 或者 OpenType 字體文件,并且創建一個字體對象。通常的編碼方式是“unic”(Unicode)、“symb”(MicrosoftSymbol)、“ADOB”
(Adobe Standard)、“ADBE”(Adobe Expert)和“armn”(Apple Roman)。語法格式如下:
ImageFont.truetype(file,size,encoding=value)
(4)load_default():功能是加載一種默認的字體。
ImageFont.load_default()
(5)getsize():返回給定文本的寬度和高度,返回值是一個二元組。具體語法格式如下:
ImageFont.getsize()