程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python—PIL圖像操作(二)濾鏡、圖片合成、圖像效果

編輯:Python

目錄

ImageFilter濾鏡

ImageChops圖片合成

ImageEnhance圖像效果


ImageFilter濾鏡

ImageFilter模塊實現了濾鏡功能,使用函數filter()可以對指定的圖片使用濾鏡效果,函數filter()的語法:Image.filter()      #參數為濾鏡方式

ImageFilter提供了預定義的濾鏡和自定義濾鏡函數。常用的預定義濾鏡:

  • BLUE:模糊
  • CONTOUR:輪廓
  • DETAIL:詳情
  • EDGE_ ENHANCE:邊緣增強
  • EDGE_ ENHANCE _MORE:邊緣更多增強
  • EMBOSS:浮雕
  • FIND_ EDGES:尋找邊緣
  • SHARPEN:銳化
  • SMOOTH:平滑

from PIL import Image, ImageFilter
img1 = Image.open('poo/1.jpg')
gaosi = img1.filter(ImageFilter.GaussianBlur) # 高斯模糊
lunkuo = img1.filter(ImageFilter.CONTOUR) # 輪廓
w, h = img1.size
new_img = Image.new('RGB', (w * 3, h), 'yellow')
new_img.paste(img1, (0, 0)) # 原圖
new_img.paste(gaosi, (w, 0))
new_img.paste(lunkuo, (w * 2, 0))
new_img.show()

ImageChops圖片合成

ImageChops模塊中包含了多個用於實現圖片合成的函數。這些合成功能是通過計算通道中像素值的方式來實現的。其主要用於制作特效、合成圖片等操作。

常用的內置函數:

①相加函數add()對兩張圖片進行算術加法運算:ImageChops.add(image1, image2, scale= 1.0, offset=0),合成後的圖像中每個像素值,是兩幅圖像對應像素值依據公式out = ((image1 + image2) / scale + offset)進行計算得到的。

②減法函數subtract()對兩張圖片進行算術減法運算:ImageChops.subtract(image1, image2, scale=1.0, offset=0),在合成後圖像中的每個像素值,是兩幅圖像對應像素值依據公式out = ((image1 - image2) / scale + offset)進行得到的。

③變暗函數darker()比較兩個圖片的像素,取兩張圖片中對應像素的較小值,所以合成時兩幅圖像中對應位置的暗部分得到保留,而去除亮部分:ImageChops.darker(image1, image2),

像素的計算公式out = min(image1, image2)

④變亮函數lighter()與變暗函數dapker()相反,功能是比較兩個圖片(逐像素比較),返回新的圖片,這幅新的圖片是將兩張圖片中較亮的部分疊加得到的。即在某一點上,取兩張圖中值大(亮)的點:ImageChops.lighter(image1, image2),像素的計算公式out = max(imagel, image2)

⑤疊加函數multiply()將兩張圖片互相疊加。如果用純黑色與某圖片進行疊加操作,就會得到一幅純黑色的圖片。如果用純白色與圖片作疊加,則圖片不受影響:ImageChops.multiply (image1, image2)合成的圖像的效果類似兩張圖片在透明的描圖紙上疊放在一起觀看的效果。像素計算公式out = image1 * image2 / MAX

⑥屏幕函數screen()先反色後疊加,實現合成圖像的效果,如將兩張幻燈片用兩台投影機同時投影到一個屏幕上的效果:ImageChops.screen(image1, image2),像素計算公out=MAX-(MAX-image1)* (MAX-image2)/MAX)

⑦反色函數invert()類似於集合操作中的求補集,最大值為Max,每個像素做減法,取出反色。在反色時將用255減去一幅圖像的每個像素值,從而得到原來圖像的反相,其表現為“底片”性質的圖像:ImageChops.invert (image),像素計算公式out = MAX - image

⑧比較函數difference()逐像素做減法操作,計算出絕對值。兩幅圖像對應像素值相減後的圖像,對應像素值相同的則為黑色。通常用來找出圖像之間的差異:ImageChops.diference (image1, image2),像素計算公式out = abs(image1 - image2)

from PIL import Image,ImageChops
img1 = Image.open('poo/1.jpg')
img2 = Image.open('poo/5.jpg')
ImageChops.add(img1,img2).show()
ImageChops.subtract(img1,img2).show()
ImageChops.darker(img1,img2).show()
ImageChops.lighter(img1,img2).show()
ImageChops.multiply(img1,img2).show()
ImageChops.screen(img1,img2).show()
ImageChops.invert(img2).show()
ImageChops.difference(img1,img2).show()

ImageEnhance圖像效果

ImageEnbance模塊中包含了多個用於增強圖像效果的函數,主要用來調整圖像的色彩、對比度、亮度和清晰度等。在模塊ImageEnhance中,所有的圖片增強對象實現都通過一個通用的接口方法enhance()調用,enhance(factor)返回一個增強的Image對象,參數factor是一個大於0的浮點數,1表示返回原始圖片。

當在Python程序中使用模塊ImageEnhance增強圖像效果時,需要首先創建對應的增強調整器,然後調用調整器輸出函數,根據指定的增強系數(小於1表示減弱,大於1表示增強,等於1表示原圖不變)進行調整,最後輸出調整後的圖像。

在模塊ImageEnhance中,常用的內置函數:

(1)ImageEnhance.Color(image) :調整圖像色彩平衡

(2) ImageEnhance.Contrast(image):調整圖像對比度

(3) ImageEnhance.Brightness(image):調整圖像亮度。

(4) ImageEnhance Sharpness(image): 調整圖像清晰度,用於銳化/鈍化圖片。(銳化操作的factor是0~2之間的一個浮點數。當factor=0時,返回一個模糊的圖片對象;當factor=2時,返回一個銳化的圖片對象;當factor=1時,返回原始圖片對象)

from PIL import Image,ImageEnhance
# 調節色彩
img2 = Image.open('poo/5.jpg')
img_color = ImageEnhance.Color(img2)
w1, h1 = img2.size
img_out = Image.new('RGB', (w1 * 3, h1), 'green')
imga = img_color.enhance(1.9)
imgb = img_color.enhance(0.5)
img_out.paste(imga, (0, 0))
img_out.paste(img2, (w1, 0)) # 原圖
img_out.paste(imgb, (w1 * 2, 0))
img_out.show()
# 調節亮度
img_brightness = ImageEnhance.Brightness(img_out)
imgc = img_brightness.enhance(0.5).show()
# img_out.point(lambda i: i * 0.5).show() # 通過Image的point()方法也可以實現像素點亮度的調節


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved