ImageChops 模塊
在 Pillow 庫的內置模塊 ImageChops 中包含了多個用于實現圖片合成的函數。這些合成
功能是通過計算通道中像素值的方式來實現的。其主要用于制作特效、合成圖片等操作。
常用的內置函數如下所示:
(1)相加函數 add(),功能是對兩張圖片進行算術加法運算。具體語法如下所示:
ImageChops.add(image1,image2,scale = 1.0,offset = 0 )
(2)減法函數 subtract(),功能是對兩張圖片進行算術減法運算。具體語法如下所示:
ImageChops.subtract(image1,image2,scale = 1.0,offset = 0 )
from PIL import Image
from PIL import ImageChops
#打開圖片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#對兩張圖片進行減法運算
ImageChops.subtract(imga,imgb,1,0).show()
變暗函數 darker()
功能是比較兩個圖片的像素,取兩張圖片中對應像素的較小值,所
以合成時兩幅圖像中對應位置的暗部分得到保留,而去除亮部分。具體語法如下所示:
ImageChops.darker(image1,image2 )
from PIL import Image
from PIL import ImageChops
#打開圖片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#使用變暗函數 darker()
ImageChops.darker(imga,imgb).show()
變亮函數 lighter()
與變暗函數 darker()相反,功能是比較兩個圖片(逐像素比較,返回一幅新的圖片,這幅新的圖片是將兩張圖片中較亮的部分疊加得到的。也就是說,在某
一點上,兩張圖中哪個的值大(亮)則取之。具體語法如下所示
from PIL import Image
from PIL import ImageChops
#打開圖片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#使用變亮函數 lighter()
ImageChops.lighter(imga,imgb).show()
疊加函數 multiply(),功能是將兩張圖片互相疊加。如果用純黑色與某圖片進行疊加操
作,就會得到一幅純黑色的圖片。如果用純白色與圖片作疊加,則圖片不受影響。具體語法
from PIL import Image
from PIL import ImageChops
#打開圖片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#將兩張圖片相互疊加
ImageChops.multiply(imga,imgb).show()
out = image1 * image2 / MAX
屏幕函數 screen(),功能是先反色后疊加,實現合成圖像的效果,就像將兩張幻燈片用
兩臺投影機同時投影到一個屏幕上的效果。具體語法如下所示:
from PIL import Image
from PIL import ImageChops
#打開圖片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#實現反色后疊加
# ImageChops.screen(imga,imgb).show()
反色函數 invert(),類似于集合操作中的求補集,最大值為 Max,每個像素做減法,取
出反色。在反色時將用 255 減去一幅圖像的每個像素值,從而得到原來圖像的反相。也就是
說,其表現為“底片”性質的圖像。具體語法如下所示:
from PIL import Image
from PIL import ImageChops
#打開圖片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#使用反色函數 invert()
ImageChops.invert(imga).show()
比較函數 difference(),可以逐像素做減法操作,計算出絕對值。函數 difference()能夠
兩幅圖像的對應像素值相減后的圖像,對應像素值相同的,則為黑色。函數 difference()通常
用來找出圖像之間的差異。具體語法如下所示:
from PIL import Image
from PIL import ImageChops
#打開圖片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#使用比較函數 difference()
ImageChops.difference(imga,imgb).show()
out = abs(image1 - image2)