溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python圖像處理庫(kù)PIL怎么使用

發(fā)布時(shí)間:2022-04-06 15:17:43 來(lái)源:億速云 閱讀:154 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇“Python圖像處理庫(kù)PIL怎么使用”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“Python圖像處理庫(kù)PIL怎么使用”文章吧。

一、 簡(jiǎn)介

1、 基本介紹

Pillow 是 Python 中較為基礎(chǔ)的圖像處理庫(kù),主要用于圖像的基本處理,比如裁剪圖像、調(diào)整圖像大小和圖像顏色處理等。與 Pillow 相比,OpenCV 和 Scikit-image 的功能更為豐富,所以使用起來(lái)也更為復(fù)雜,主要應(yīng)用于機(jī)器視覺(jué)、圖像分析等領(lǐng)域,比如眾所周知的“人臉識(shí)別”應(yīng)用 。

2、 特點(diǎn)

  • 支持格式繁多

    Pillow 支持廣泛的圖像格式,比如 "jpeg","png","bmp","gif","ppm","tiff" 等。同時(shí),它也支持圖像格式之間的相互轉(zhuǎn)換??傊?Pillow 幾乎能夠處理任何格式的圖像

  • 提供豐富的功能

    Pillow 提供了豐富的圖像處理功能,可概括為兩個(gè)方面:

    圖像歸檔,包括創(chuàng)建縮略圖、生成預(yù)覽圖像、圖像批量處理等;而圖像處理,則包括調(diào)整圖像大小、裁剪圖像、像素點(diǎn)處理、添加濾鏡、圖像顏色處理等

    • 圖像歸檔

    • 圖像處理

  • 配合 GUI 工具使用

3、 安裝

pip install pillow
導(dǎo)包
imoprt PIL

二、 Image 對(duì)象

1、 實(shí)例化對(duì)象

1.1 實(shí)例化

導(dǎo)包

from PIL import Image

使用 open 方法

im = PIL.Image.open(fp) # 導(dǎo)入圖片
im.show() # 展示圖片

fp:圖片路徑

使用 open 方法

im = Image.new(mode,size,color) # 創(chuàng)建圖片
im.show() # 展示圖片

參數(shù)說(shuō)明如下:

  • mode:圖像模式,字符串參數(shù),比如 RGB(真彩圖像)、L(灰度圖像)、CMYK(色彩圖打印模式)等

  • size:圖像大小,元組參數(shù)(width, height)代表圖像的像素大小

  • color:圖片顏色,默認(rèn)值為 0 表示黑色,參數(shù)值支持(R,G,B)三元組數(shù)字格式、顏色的十六進(jìn)制值以及顏色英文單詞

1.2 圖像模式

mode描述
11 位像素(取值范圍 0-1),0表示黑,1 表示白,單色通道。
L8 位像素(取值范圍 0 -255),灰度圖,單色通道。
P8 位像素,使用調(diào)色板映射到任何其他模式,單色通道。
RGB3 x 8位像素,真彩色,三色通道,每個(gè)通道的取值范圍 0-255。
RGBA4 x 8位像素,真彩色+透明通道,四色通道。
CMYK4 x 8位像素,四色通道,可以適應(yīng)于打印圖片。
YCbCr3 x 8位像素,彩色視頻格式,三色通道。
LAB3 x 8位像素,L * a * b顏色空間,三色通道
HSV3 x 8位像素,色相,飽和度,值顏色空間,三色通道。
I32 位有符號(hào)整數(shù)像素,單色通道。
F32 位浮點(diǎn)像素,單色通道。

2、 對(duì)象屬性

import PIL.Image

im = PIL.Image.open(r"D:\35005\Pictures\Screenshots\微信圖片_20220302175157.jpg")
print(im.size) # 查看圖片大小
print(im.readonly) # 查看是否為只讀,1為是,0為否
print(im.format) # 查看圖片的格式
print(im.info) # 查看圖片的相關(guān)信息
print(im.mode) # 查看圖片的模式

3、 格式轉(zhuǎn)換

3.1 save 方法

save 方法用于保存 圖像,當(dāng)不指定文件格式時(shí),它會(huì)以默認(rèn)的圖片格式來(lái)存儲(chǔ);如果指定圖片格式,則會(huì)以指定的格式存儲(chǔ)圖片

語(yǔ)法:

im = PIL.Image.open(r"D:\35005\Pictures\Screenshots\微信圖片_20220302175157.jpg")
im.save(fp, format=None) # 保存圖片

參數(shù)說(shuō)明如下:

  • fp:圖片的存儲(chǔ)路徑,包含圖片的名稱,字符串格式

  • format:可選參數(shù),可以指定圖片的格式

3.2 convert 方法

注意,并非所有的圖片格式都可以用 save() 方法轉(zhuǎn)換完成,比如將 PNG 格式的圖片保存為 JPG 格式,如果直接使用 save() 方法就會(huì)出現(xiàn)錯(cuò)誤

引發(fā)錯(cuò)誤的原因是由于 PNG 和 JPG 圖像模式不一致導(dǎo)致的。其中 PNG 是四通道 RGBA 模式,即紅色、綠色、藍(lán)色、Alpha 透明色;JPG 是三通道 RGB 模式。因此要想實(shí)現(xiàn)圖片格式的轉(zhuǎn)換,就要將 PNG 轉(zhuǎn)變?yōu)槿ǖ?RGB 模式

Image 類提供的 convert() 方法可以實(shí)現(xiàn)圖像模式的轉(zhuǎn)換。該函數(shù)提供了多個(gè)參數(shù),比如 mode、matrix、dither 等,其中最關(guān)鍵的參數(shù)是 mode,其余參數(shù)無(wú)須關(guān)心

語(yǔ)法:

im.convert(mode, params) # 轉(zhuǎn)換模式
im.save(fp) # 保存圖片

參數(shù):

  • mode:指的是要轉(zhuǎn)換成的圖像模式

  • params:其他可選參數(shù)

4、 圖片縮放

在圖像處理過(guò)程中經(jīng)常會(huì)遇到縮小或放大圖像的情況,Image 類提供的 resize() 方法能夠?qū)崿F(xiàn)任意縮小和放大圖像

語(yǔ)法:

im_new = im.resize(size, resample=image.BICUBIC, box=None, reducing_gap=None) # 注意要重新賦值
im_new.show() # 縮放后的圖片

參數(shù):

  • size:元組參數(shù) (width,height),圖片縮放后的尺寸

  • resample:可選參數(shù),指圖像重采樣濾波器,與 thumbnail() 的 resample 參數(shù)類似,默認(rèn)為 Image.BICUBIC

  • box:對(duì)指定圖片區(qū)域進(jìn)行縮放,box 的參數(shù)值是長(zhǎng)度為 4 的像素坐標(biāo)元組,即 (左,上,右下)。注意,被指定的區(qū)域必須在原圖的范圍內(nèi),如果超出范圍就會(huì)報(bào)錯(cuò)。當(dāng)不傳該參數(shù)時(shí),默認(rèn)對(duì)整個(gè)原圖進(jìn)行縮放

    (0, 0, 120, 180)代表的是以原圖的左上角為原點(diǎn),選擇寬和高分別是(120,180)的圖像區(qū)域

  • reducing_gap:可選參數(shù),浮點(diǎn)參數(shù)值,用于優(yōu)化圖片的縮放效果,常用參數(shù)值有 3.0 和 5.0

5、 創(chuàng)建縮略圖

縮略圖指的是將原圖縮小至一個(gè)指定大小(size)的圖像。通過(guò)創(chuàng)建縮略圖可以使圖像更易于展示和瀏覽

Image 對(duì)象提供了一個(gè) thumbnail() 方法用來(lái)生圖像的縮略圖,等比縮放

語(yǔ)法:

im.thumbnail(size,resample) # 直接在原圖的基礎(chǔ)上修改
im.show() # 縮放后的圖片

參數(shù):

  • size:元組參數(shù),指的是縮小后的圖像大小

  • resample:可選參數(shù),指圖像重采樣濾波器,有四種過(guò)濾方式,分別是 Image.BICUBIC(雙立方插值法)、PIL.Image.NEAREST(最近鄰插值法)、PIL.Image.BILINEAR(雙線性插值法)、PIL.Image.LANCZOS(下采樣過(guò)濾插值法),默認(rèn)為 Image.BICUBIC

6、 圖像分離與合并

圖像(指數(shù)字圖像)由許多像素點(diǎn)組成,像素是組成圖像的基本單位,而每一個(gè)像素點(diǎn)又可以使用不同的顏色,最終呈現(xiàn)出了絢麗多彩的圖像 ,而圖像的分離與合并,指的就是圖像顏色的分離和合并

6.1 split 方法

im = PIL.Image.open(r"D:\35005\Pictures\Screenshots\微信圖片_20220302175157.jpg")
r, g, b = im.split() # split 方法使用較簡(jiǎn)單,分離通道
r.show()
g.show()
b.show()

6.2 merge 方法

Image 類提供的 merge() 方法可以實(shí)現(xiàn)圖像的合并操作。注意,圖像合并,可以是單個(gè)圖像合并,也可以合并兩個(gè)以上的圖像

im_merge = PIL.Image.merge(mode, bands)
im_merge.show()

參數(shù):

  • mode:指定輸出圖片的模式

  • bands:參數(shù)類型為元組或者列表序列,其元素值是組成圖像的顏色通道,比如 RGB 分別代表三種顏色通道,可以表示為 (r, g, b)

6.3 blend 方法

Image 類也提供了 blend() 方法來(lái)混合 RGBA 模式的圖片(PNG 格式)

語(yǔ)法:

PIL.Image.blend(image1,image2, alpha)

參數(shù):

  • image1:圖片對(duì)象1

  • image2:圖片對(duì)象2

  • alpha:透明度 ,取值范圍為 0 到 1,當(dāng)取值為 0 時(shí),輸出圖像相當(dāng)于 image1 的拷貝,而取值為 1 時(shí),則是 image2 的拷貝,只有當(dāng)取值為 0.5 時(shí),才為兩個(gè)圖像的中合。因此改值的大小決定了兩個(gè)圖像的混合程度

7、 圖像處理

7.1 圖像裁剪

Image 類提供的 crop() 函數(shù)允許我們以矩形區(qū)域的方式對(duì)原圖像進(jìn)行裁剪

語(yǔ)法:

im_crop = im.crop(box=None) # box 代表裁剪區(qū)域
im_crop.show()

box 是一個(gè)有四個(gè)數(shù)字的元組參數(shù) (x_左上,y_左下,x1_右上,y1_右下),分別表示被裁剪矩形區(qū)域的左上角 x、y 坐標(biāo)和右下角 x,y 坐標(biāo)。默認(rèn) (0,0) 表示坐標(biāo)原點(diǎn),寬度的方向?yàn)?x 軸,高度的方向?yàn)?y 軸,每個(gè)像素點(diǎn)代表一個(gè)單位

7.2 拷貝和粘貼

拷貝、粘貼操作幾乎是成對(duì)出現(xiàn)的,Image 類提供了 copy() 和 paste() 方法來(lái)實(shí)現(xiàn)圖像的復(fù)制和粘貼

拷貝語(yǔ)法:

im_copy = im.copy() # 復(fù)制圖片

粘貼語(yǔ)法:

im_copy.paste(image, box=None, mask=None)

參數(shù):

  • image:指被粘貼的圖片

  • box:指定圖片被粘貼的位置或者區(qū)域,其參數(shù)值是長(zhǎng)度為 2 或者 4 的元組序列,長(zhǎng)度為 2 時(shí),表示具體的某一點(diǎn) (x, y);長(zhǎng)度為 4 則表示圖片粘貼的區(qū)域,此時(shí)區(qū)域的大小必須要和被粘貼的圖像大小保持一致

  • mask:可選參數(shù),為圖片添加蒙版效果

注意:

  • 粘貼后的圖片模式將自動(dòng)保持一致,不需要進(jìn)行額外的轉(zhuǎn)換

from PIL import Image

im = Image.open(r"D:\35005\Pictures\Screenshots\微信圖片_20220302175157.jpg")

# 復(fù)制一張圖片副本
im_copy = im.copy()

# 對(duì)副本進(jìn)行裁剪
im_crop = im_copy.crop((0, 0, 200, 100))

# 創(chuàng)建一個(gè)新的圖像作為蒙版,L模式,單顏色值
image_new = Image.new('L', (200, 100), 200)

# 將裁剪后的副本粘貼至副本圖像上,并添加蒙版
im_copy.paste(im_crop, (100, 100, 300, 200), mask=image_new)

# 顯示粘貼后的圖像
im_copy.show()

8、幾何變化

圖像的幾何變換主要包括圖像翻轉(zhuǎn)、圖像旋轉(zhuǎn)和圖像變換操作,Image 類提供了處理這些操作的函數(shù) transpose()、rotate() 和 transform()

8.1 transpose

該函數(shù)可以實(shí)現(xiàn)圖像的垂直、水平翻轉(zhuǎn)

語(yǔ)法:

im_out = im.transpose(method) # 生成新的圖像對(duì)象

method取值:

  • Image.FLIP_LEFT_RIGHT:左右水平翻轉(zhuǎn)

  • Image.FLIP_TOP_BOTTOM:上下垂直翻轉(zhuǎn)

  • Image.ROTATE_90:圖像逆時(shí)針旋轉(zhuǎn) 90 度

  • Image.ROTATE_180:圖像旋轉(zhuǎn) 180 度

  • Image.ROTATE_270:圖像旋轉(zhuǎn) 270 度

  • Image.TRANSPOSE:圖像轉(zhuǎn)置

  • Image.TRANSVERSE:圖像橫向翻轉(zhuǎn)

8.2 rotate

當(dāng)我們想把圖像旋轉(zhuǎn)任意角度時(shí),可以使用 rotate() 函數(shù)

語(yǔ)法:

im_out = im.rotate(angle, resample=PIL.Image.NEAREST, expand=None, center=None, translate=None, fillcolor=None) # 返回圖像對(duì)象

參數(shù):

  • angle:表示任意旋轉(zhuǎn)的角度

  • resample:重采樣濾波器,默認(rèn)為 PIL.Image.NEAREST 最近鄰插值方法

  • expand:可選參數(shù),表示是否對(duì)圖像進(jìn)行擴(kuò)展,如果參數(shù)值為 True 則擴(kuò)大輸出圖像,如果為 False 或者省略,則表示按原圖像大小輸出

  • center:可選參數(shù),指定旋轉(zhuǎn)中心,參數(shù)值是長(zhǎng)度為 2 的元組,默認(rèn)以圖像中心進(jìn)行旋轉(zhuǎn)

  • translate:參數(shù)值為二元組,表示對(duì)旋轉(zhuǎn)后的圖像進(jìn)行平移,以左上角為原點(diǎn);translate的參數(shù)值可以為負(fù)數(shù)

  • fillcolor:可選參數(shù),填充顏色,圖像旋轉(zhuǎn)后,對(duì)圖像之外的區(qū)域進(jìn)行填充

8.3 transform

該函數(shù)能夠?qū)D像進(jìn)行變換操作,通過(guò)指定的變換方式,產(chǎn)生一張規(guī)定大小的新圖像

語(yǔ)法:

im_out = im.transform(size, method, data=None, resample=0) # 返回圖像對(duì)象

參數(shù):

  • size:指定新圖片的大小

  • method:指定圖片的變化方式,比如 Image.EXTENT 表示矩形變換

  • data:該參數(shù)用來(lái)給變換方式提供所需數(shù)據(jù)

  • resample:圖像重采樣濾波器,默認(rèn)參數(shù)值為 PIL.Image.NEAREST

三、 ImageFilter

1、 簡(jiǎn)介

隨著數(shù)字圖像技術(shù)的不斷發(fā)展,圖像降噪方法也日趨成熟,通過(guò)某些算法來(lái)構(gòu)造濾波器是圖像降噪的主要方式。濾波器能夠有效抑制噪聲的產(chǎn)生,并且不影響被處理圖像的形狀、大小以及原有的拓?fù)浣Y(jié)構(gòu)

Pillow 通過(guò) ImageFilter 類達(dá)到圖像降噪的目的,該類中集成了不同種類的濾波器,通過(guò)調(diào)用它們從而實(shí)現(xiàn)圖像的平滑、銳化、邊界增強(qiáng)等圖像降噪操作

2、 降噪處理

2.1 圖像降噪濾波器

名稱說(shuō)明
ImageFilter.BLUR模糊濾波,即均值濾波
ImageFilter.CONTOUR輪廓濾波,尋找圖像輪廓信息
ImageFilter.DETAIL細(xì)節(jié)濾波,使得圖像顯示更加精細(xì)
ImageFilter.FIND_EDGES尋找邊界濾波(找尋圖像的邊界信息)
ImageFilter.EMBOSS浮雕濾波,以浮雕圖的形式顯示圖像
ImageFilter.EDGE_ENHANCE邊界增強(qiáng)濾波
ImageFilter.EDGE_ENHANCE_MORE深度邊緣增強(qiáng)濾波
ImageFilter.SMOOTH平滑濾波
ImageFilter.SMOOTH_MORE深度平滑濾波
ImageFilter.SHARPEN銳化濾波
ImageFilter.GaussianBlur()高斯模糊
ImageFilter.UnsharpMask()反銳化掩碼濾波
ImageFilter.Kernel()卷積核濾波
ImageFilter.MinFilter(size)最小值濾波器,從 size 參數(shù)指定的區(qū)域中選擇最小像素值,然后將其存儲(chǔ)至輸出圖像中。
ImageFilter.MedianFilter(size)中值濾波器,從 size 參數(shù)指定的區(qū)域中選擇中值像素值,然后將其存儲(chǔ)至輸出圖像中。
ImageFilter.MaxFilter(size)最大值濾波器
ImageFilter.ModeFilter()模式濾波

2.2 使用語(yǔ)法

語(yǔ)法:

im_ft = im.filter(filt_mode) # 返回圖像對(duì)象,里面?zhèn)魅霝V波器

實(shí)例:

from PIL import Image, ImageFilter

im = Image.open(r"D:\35005\Pictures\Screenshots\微信圖片_20220302175157.jpg")
im_ft = im.filter(ImageFilter.EMBOSS) # 添加浮雕濾波器
im_ft.show()

相當(dāng)于PS里面添加的濾鏡

四、 ImageColor

1、 簡(jiǎn)介

Pillow 提供了顏色處理模塊 ImageColor,該模塊支持不同格式的顏色,比如 RGB 格式的顏色三元組、十六進(jìn)制的顏色名稱(#ff0000)以及顏色英文單詞("red")。同時(shí),它還可以將 CSS(層疊樣式表,用來(lái)修飾網(wǎng)頁(yè))風(fēng)格的顏色轉(zhuǎn)換為 RGB 格式

在 ImageColor 模塊對(duì)顏色的大小寫并不敏感,比如 "Red" 也可以寫為 " red"

2、 顏色處理

2.1 顏色命名

ImageColor 支持多種顏色模式的的命名(即使用固定的格式對(duì)顏值進(jìn)行表示),比如我們熟知的 RGB 色彩模式,除此之外,還有 HSL (色調(diào)-飽和度-明度)、HSB (又稱 HSV,色調(diào)-飽和度-亮度)色彩模式。下面對(duì) HSL 做簡(jiǎn)單介紹:

  • H:即 Hue 色調(diào),取值范圍 0 -360,其中 0 表示“red”,120 表示 “green”,240 表示“blue”

  • S:即 Saturation 飽和度,代表色彩的純度,取值 0~100%,其中 0 代表灰色(gry),100% 表示色光最飽和

  • L:即 Lightness 明度,取值為 0~100%,其中 0 表示“black”黑色,50% 表示正常顏色,100% 則表示白色

亮度和明度的表達(dá)方式類似,鏈接中有具體描述:【https://www.zhihu.com/question/22077462】

ImageColor 模塊比較簡(jiǎn)單,只提供了兩個(gè)常用方法,分別是 getrgb() 和 getcolor() 函數(shù)

2.2 getrgb

語(yǔ)法:

rgb = PIL.ImageColor.getrgb(color) # 得到顏色的 rgb 數(shù)值

color參數(shù)即可以是英文,也可以是HSL和HSB模式2.3

應(yīng)用:

from PIL import Image, ImageColor

im = Image.new(mode="RGB", size=(100, 100), color=ImageColor.getrgb('HSL(0,100%,50%)'))
im.show()

2.3 getcolor

語(yǔ)法:

val = PIL.ImageColor.getcolor(color, mode)

參數(shù):

  • color:一個(gè)顏色名稱,字符串格式,可以是顏色的英文單詞,或者十六進(jìn)制顏色名。如果是不支持的顏色,會(huì)報(bào) ValueError 錯(cuò)誤

  • mode:指定色彩模式,如果是不支持的模式,會(huì)報(bào) KeyError 錯(cuò)誤

五、 ImageFont

1、 簡(jiǎn)介

ImageFont模塊定義了相同名稱的類,即ImageFont類。這個(gè)類的實(shí)例存儲(chǔ)bitmap字體,用于ImageDraw類的text()方法

PIL使用自己的字體文件格式存儲(chǔ)bitmap字體。用戶可以使用pilfont工具包將BDF和PCF字體描述器(Xwindow字體格式)轉(zhuǎn)換為這種格式

2、 模塊函數(shù)

2.1 load

語(yǔ)法:

ft = PIL.ImageFont.load(font_file)

從指定的文件中加載一種字體 ,返回字體對(duì)象

2.2 load_path

語(yǔ)法:

ft = PIL.ImageFont.load_path(font_file)

和函數(shù)load()一樣,但是如果沒(méi)有指定當(dāng)前路徑的話,會(huì)從sys.path開(kāi)始查找指定的字體文件

2.3 truetype

語(yǔ)法:

ft = PIL.ImageFont.truetype(file, size[, encoding=None])

參數(shù):

  • file: 加載一個(gè)TrueType或者OpenType字體文件

  • size: 為指定大小的字體創(chuàng)建了字體對(duì)象

  • encoding:字體編碼,主要字體編碼有: “unic”(Unicode),“symb”(Microsoft Symbol),“ADOB”(Adobe Standard),“ADBE”(Adobe Expert)和“armn”(Apple Roman)

2.4 load_default

語(yǔ)法:

ft = PIL.ImageFont.load_default()

加載一個(gè)默認(rèn)字體,返回一個(gè)字體對(duì)象

3、 模塊方法

3.1 getsize

語(yǔ)法:

size = ft.getsize(text)

返回給定文本的寬度和高度,返回值為2元組

3.2 getmask

語(yǔ)法:

obj = ft.getmask(text,mode=None) # 為給定的文本返回一個(gè)位圖。這個(gè)位圖是PIL內(nèi)部存儲(chǔ)內(nèi)存的實(shí)例

參數(shù):

  • text :要渲染的文本。

  • mode:某些圖形驅(qū)動(dòng)程序使用它來(lái)指示驅(qū)動(dòng)程序喜歡哪種模式;如果為空,渲染器可能返回任一模式。請(qǐng)注意,模式始終是字符串

六、 ImageDraw

1、 簡(jiǎn)介

1.1 導(dǎo)入

ImageDraw 模塊也是 Pillow 庫(kù)的主要模塊之一,它能給圖像化圓弧,畫橫線,寫上文字等

導(dǎo)入:

from PIL import ImageDraw

實(shí)例化對(duì)象:

from PIL import Image, ImageDraw

im = Image.open("./a.jpg") # 創(chuàng)建 image 對(duì)象
draw = ImageDraw.Draw(im) # 實(shí)例化可以在指定圖像上畫圖的 Draw 對(duì)象

1.2 基本概念

  • Coordinates

    • 繪圖接口使用和PIL一樣的坐標(biāo)系統(tǒng),即(0,0)為左上角。

  • Colours

    • 為了指定顏色,用戶可以使用數(shù)字或者元組,對(duì)應(yīng)用戶使用函數(shù)Image.new或者Image.putpixel。對(duì)于模式為“1”,“L”和“I”的圖像,使用整數(shù)。對(duì)于“RGB”圖像,使用整數(shù)組成的3元組。對(duì)于“F”圖像,使用整數(shù)或者浮點(diǎn)數(shù)。

    • 對(duì)于調(diào)色板圖像(模式為“P”),使用整數(shù)作為顏色索引。在1.1.4及其以后,用戶也可以使用RGB 3元組或者顏色名稱。繪制層將自動(dòng)分配顏色索引,只要用戶不繪制多于256種顏色。

  • Colours Names

    • A、 十六進(jìn)制顏色說(shuō)明符,定義為“#rgb”或者“#rrggbb”。例如,“#ff0000”表示純紅色。

    • B、 RGB函數(shù),定義為“rgb(red, green, blue)”,變量red、green、blue的取值為[0,255]之間的整數(shù)。另外,顏色值也可以為[0%,100%]之間的三個(gè)百分比。例如,“rgb(255, 0, 0)”和“rgb(100%, 0%, 0%)”都表示純紅色。

    • C、 HSL(Hue-Saturation-Lightness)函數(shù),定義為“hsl(hue,saturation%, lightness%)”,變量hue為[0,360]一個(gè)角度表示顏色(red=0, green=120, blue=240),變量saturation為[0%,100%]之間的一個(gè)值(gray=0%,full color=100%),變量lightness為[0%,100%]之間的一個(gè)值(black=0%, normal=50%, white=100%)。例如,“hsl(0,100%, 50%)”為純紅色。

    • D、 通用HTML顏色名稱,ImageDraw模塊提供了140個(gè)標(biāo)準(zhǔn)顏色名稱,Xwindow系統(tǒng)和大多數(shù)web瀏覽器都支持這些顏色。顏色名稱對(duì)大小寫不敏感。例如,“red”和“Red”都表示純紅色。

    • 在PIL 1.1.4及其以后的版本,用戶繪制“RGB”圖像時(shí),可以使用字符串常量。PIL支持如下字符串格式:

  • Fonts

    • PIL可以使用bitmap字體或者OpenType/TrueType字體

2、 模塊函數(shù)

2.1 arc

語(yǔ)法:

draw.arc(xy, start, end, options)

在給定的區(qū)域內(nèi),在開(kāi)始和結(jié)束角度之間繪制一條弧

options:可以有什么內(nèi)容可以在源代碼中查看

2.2 bitmap

語(yǔ)法:

draw.bitmap(xy, bitmap, options) # options中可以添加 fill 覆蓋的顏色

在給定的區(qū)域里繪制變量bitmap所對(duì)應(yīng)的位圖,非零部分使用變量options中fill的值來(lái)填充。變量bitmap位圖應(yīng)該是一個(gè)有效的透明模板(模式為“1”)或者蒙版(模式為“L”或者“RGBA”)

變量xy是變量bitmap對(duì)應(yīng)位圖起始的坐標(biāo)值,而不是一個(gè)區(qū)域

這個(gè)方法與Image.paste(xy, color, bitmap)有相同的功能

2.3 chord

語(yǔ)法:

draw.chord(xy, start, end, options)

和方法arc()一樣,但是使用直線連接起始點(diǎn)

變量 options 的 outline 給定弦輪廓的顏色;fill 給定弦內(nèi)部的顏色

2,4 ellipse

語(yǔ)法:

draw.ellipse(xy, options)

在給定的區(qū)域繪制一個(gè)橢圓形

變量 options 的 outline 給定弦輪廓的顏色;fill 給定弦內(nèi)部的顏色

2.5 line

語(yǔ)法:

draw.line(xy, options)

在變量xy列表所表示的坐標(biāo)之間畫線

xy里面至少有兩個(gè)坐標(biāo),坐標(biāo)使用元組表示,存儲(chǔ)在一個(gè)列表里面[(x1, y1), (x2, y2)]

width指定寬度,fill 指定線的顏色

2.6 pieslice

語(yǔ)法:

draw.pieslice(xy, start, end, options)

和方法arc()一樣,但是在指定區(qū)域內(nèi)結(jié)束點(diǎn)和中心點(diǎn)之間繪制直線

2.7 point

語(yǔ)法:

draw.point(xy, options)

在指定位置畫一個(gè)只占一個(gè)像素的小點(diǎn)

2.8 polygon

語(yǔ)法:

draw.polygon(xy, options)

繪制一個(gè)多邊形

多邊形輪廓由給定坐標(biāo)之間的直線組成,在最后一個(gè)坐標(biāo)和第一個(gè)坐標(biāo)間增加了一條直線,形成多邊形

坐標(biāo)列表是包含2元組[(x,y),…]或者數(shù)字[x,y,…]的任何序列對(duì)象,它最少包括3個(gè)坐標(biāo)值

變量options的fill給定多邊形內(nèi)部的顏色

2.9 rectangle

語(yǔ)法:

draw.rectangle(xy, options)

繪制一個(gè)長(zhǎng)邊形

變量xy是包含2元組[(x,y),…]或者數(shù)字[x,y,…]的任何序列對(duì)象,它應(yīng)該包括2個(gè)坐標(biāo)值

注意:當(dāng)長(zhǎng)方形沒(méi)有沒(méi)有被填充時(shí),第二個(gè)坐標(biāo)對(duì)定義了一個(gè)長(zhǎng)方形外面的點(diǎn)

變量options的fill給定長(zhǎng)邊形內(nèi)部的顏色

2.10 text

語(yǔ)法:

draw.text(xy, string, options)

在給定的位置繪制一個(gè)字符串。變量xy給出了文本的左上角的位置

變量option的 font 用于指定所用字體。它應(yīng)該是類ImangFont的一個(gè)實(shí)例,使用ImageFont模塊的load()方法從文件中加載的

變量options的fill給定文本的顏色

2.11 textsize

語(yǔ)法:

draw.textsize(string, options)

返回給定字符串的大小,以像素為單位

變量option的 font 用于指定所用字體。它應(yīng)該是類ImangFont的一個(gè)實(shí)例,使用ImageFont模塊的load()方法從文件中加載的

七、 Image與Numpy

from PIL import Image
import numpy as np

im = Image.open("./a.jpg")
print(np.asarray(im)) # 三維數(shù)組
na = np.asarray(im) # 將圖片轉(zhuǎn)換為數(shù)組
na[0][0][0] = 0 # 修改數(shù)組的值
im_new = Image.fromarray(na) # 將數(shù)組轉(zhuǎn)換為圖片

以上就是關(guān)于“Python圖像處理庫(kù)PIL怎么使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI