我們知道,圖像(指數(shù)字圖像)由許多像素點(diǎn)組成,像素是組成圖像的基本單位,而每一個(gè)像素點(diǎn)又可以使用不同的顏色,最終呈現(xiàn)出了絢麗多彩的圖像。在《Pillow Image對(duì)象屬性》一節(jié),我們介紹一些圖片模式,它們的本質(zhì)就是圖片呈現(xiàn)顏色時(shí)需要遵循的規(guī)則,比如 RGB、RGBA、CYMK 等,而圖像的分離與合并,指的就是圖像顏色的分離和合并。
Image 類提供了用于分離圖像和合并圖像的方法? split()
?和? merge()
?方法,通常情況下,這兩個(gè)方法會(huì)一起使用。
?split()
?的使用方法比較簡(jiǎn)單,用來(lái)分離顏色通道。我們使用它來(lái)處理蝴蝶圖片:
圖1:pilow 圖像處理操作
代碼如下所示:
im=Image.open("C:/Users/Administrator/Desktop/1.jpg")
#修改圖像大小,以適應(yīng)圖像處理
image=im.resize((450,400))
image.save("C:/Users/Administrator/Desktop/2.jpg")
#分離顏色通道,產(chǎn)生三個(gè) Image對(duì)象
r,g,b = image.split()
r.show()
g.show()
b.show()
輸出的結(jié)果,依次展示如下:
圖2:分離結(jié)果預(yù)覽
Image 類提供的? merge()
?方法可以實(shí)現(xiàn)圖像的合并操作。注意,圖像合并,可以是單個(gè)圖像合并,也可以合并兩個(gè)以上的圖像。
?merge()
?方法的語(yǔ)法格式如下:
Image.merge(mode, bands)
參數(shù)說(shuō)明如下:
注意,該函數(shù)會(huì)返回一個(gè)新的 Image 對(duì)象。
下面對(duì)圖像合并的兩種類型分別進(jìn)行介紹:
一. 單個(gè)圖像的合并指的是將顏色通道進(jìn)行重新組合,從而得到不一樣的圖片效果,代碼如下所示:
from PIL import Image
im=Image.open("./1.jpg")
#修改圖像大小,以適應(yīng)圖像處理
image=im.resize((450,400))
image.save("C:/Users/Administrator/Desktop/2.jpg")
#分離顏色通道,產(chǎn)生三個(gè) Image對(duì)象
r,g,b = image.split()
#重新組合顏色通道,返回先的Image對(duì)象
image_merge=Image.merge('RGB',(b,g,r))
image_merge.show()
#保存圖像至桌面
image_merge.save("C:/Users/Administrator/Desktop/3.jpg")
新合成的圖像入如下所示:
圖3:圖像合并操作
兩張圖片的合并操作也并不復(fù)雜,但是要求兩張圖片的模式、圖像大小必須要保持一致,否則不能合并。因此,對(duì)于那些模式、大小不同的圖片要進(jìn)行預(yù)處理。
下面我們將蝴蝶圖與向日葵圖進(jìn)行合并,向日葵原圖如下:
圖4:向日葵原圖
示例代碼如下:
from PIL import Image
#打開圖2.jpg
im_1 = Image.open("C:/Users/Administrator/Desktop/2.jpg")
im_2= Image.open("C:/Users/Administrator/Desktop/向日葵.jpg")
#因?yàn)閮煞N圖片的圖片格式一致,所以僅需要處理圖片的大小,讓它們保持一致
#讓 im_2 的圖像尺寸與 im_1 一致,注意此處新生成了 Image 對(duì)象
image = im_2.resize(im_1.size)
#接下來(lái),對(duì)圖像進(jìn)行顏色分離操作
r1, g1 ,b1 = im_1.split()
r2, g2 , b2 = image.split()
# 合并圖像
im_3 = Image.merge('RGB',[r2,g1,b2])
im_3.show()
im_3.save("C:/Users/Administrator/Desktop/合成.jpg")
預(yù)覽圖像的合成結(jié)果:
圖5:合成圖像
Image 類也提供了? blend()
?方法來(lái)混合 RGBA 模式的圖片(PNG 格式),函數(shù)的語(yǔ)法格式如下:
Image.blend(image1,image2, alpha)
參數(shù)說(shuō)明如下:
與 RGB 模式相比,RGBA 在 RGB 的基礎(chǔ)上增加了透明度,通過 Alpha 取值來(lái)決定兩個(gè)圖像的混合程度。示例如下:
""""
混合 rgba模式的圖像
"""
im1 = Image.open("../1.png")
image = Image.open("../w3cschool.png")
im2=image.resize(im1.size)
def blend_im(im1,im2):
#設(shè)置 alpha 為 0.5
Image.blend(im1,im2,0.5).save("../合成結(jié)果.png")
#調(diào)用函數(shù)
blend_im(im1,im2)
更多建議: