???
感謝優秀的你打開了小白的文章
“希望在看文章的你今天又進步了一點點,離美好生活更近一步!”🌈
目錄
🚀往期回顧
🍉前言
🍋Pillow庫的安裝
🌟影像處理之濾鏡
🌻Image 模塊內置函式和屬性
🌻ImageFilter 模塊
🌻小實體1 對圖片進行模糊操作
🌻 ImageFilter 中常用的自定義濾鏡函式
🌻 小實體2
🍉ImageChops模塊
🌻實體運用一
🌻其他函式
🍉ImageEnhance模塊使用
🌻運用-使用 ImageEnhance 實作影像色彩平衡
🌻 運用-使用 ImageEnhance 實作影像亮度
最后
🚀往期回顧
| 影像的基本處理(一) | (1條訊息) 影像基本處理(一)_am_student的博客-CSDN博客 |
| 影像的基本處理(二) | (1條訊息) 圖片的基本處理(二)_am_student的博客-CSDN博客 |
| 影像的基本處理(三) | (1條訊息) 影像的基本處理(三)_am_student的博客-CSDN博客 |
🍉前言
Pillow 是 Python Imaging Library的簡稱,是 Python 語言中最為常用的影像處理庫,Pillow 庫提供了對 Python3 的支持,為 Python3 解釋器提供了影像處理的功能,通過使用 Pillow 庫,可以方便地使用 Python 程式對圖片進行處理,例如常見的尺寸、格式、色彩、旋轉等處理,
Pillow 庫是 Python 開發者最為常見的影像處理庫,它提供了廣泛的檔案格式支持、強大的影像處理能力,主要包括影像存盤、影像顯示、格式轉換以及基本的影像處理操作等,
🍋Pillow庫的安裝
pip 安裝 pillow,執行如下命令 :
pip install pillow
🌟影像處理之濾鏡
在 Pillow 庫中的 Image 模塊中,使用函式 filter()可以對指定的圖片使用濾鏡效果,在 Pillow 庫中可以用的濾鏡保存在 ImageFilter 模塊中,使用函式 filter()的語法格式如下所示:
Image.filter(filter)
通過函式 filter(),可以使用給定的濾鏡過慮指定的影像,引數“filter”表示濾鏡內核,
🌻Image 模塊內置函式和屬性
1. Image.format:源影像格式
2. Image.mode:影像模式字串
3. Image.size:影像尺寸
4. Image.getbands():獲取影像每個通道的名稱串列,例如 RGB 影像回傳[‘R’,’G’,’B’],
5. Image.getextrema():獲取影像最大、最小像素的值,
6. Image.getpixel(xy):獲取像素點值,
7. Image.histogram(mask=None,extrema=None):獲取影像直方圖,回傳像素計數的串列,
8. Image.point(function):使用函式修改影像的每個像素,
9. Image.putalpha(alpha):添加或替換影像的 alpha 層,
10. Image.verify():校驗檔案是否損壞,
11. Image.close():關閉檔案
12. Image.save(fp,format=None,**params):保存圖片,
13. Image.show(title=None,command=None):顯示圖片,
14. Image.transform(size,method,data=None,resample=0,fill=1):變換影像,
🌻ImageFilter 模塊
內置模塊 ImageFilter 實作了濾鏡功能,可以用來創建影像特效,或以此效果作為媒介實作進一步處理, 在模塊 ImageFilter 中,提供了一些預定義的濾鏡和自定義濾鏡函式,其中最為常用的預定義濾鏡如下所示:
BLUE:模糊
CONTOUR:輪廓
DETAIL:詳情
EDGE_ENHANCE:邊緣增強
EDGE_ENHANCE_MORE:邊緣增強
EMBOSS:浮雕
FIND_EDGES:尋找邊緣
SHARPEN:銳化
SMOOTH:平滑
🌻小實體1 對圖片進行模糊操作
from PIL import Image,ImageFilter
img=Image.open('p2.jpg')
w,h=img.size
#創建一個影像
img_output=Image.new('RGB',(2*w,h))
img_output.paste(img,(0,0))
img_filter=img.filter(ImageFilter.GaussianBlur)
img_output.paste(img_filter,(w,0))
img_output.show()
結果對比展示:

🌻 ImageFilter 中常用的自定義濾鏡函式
ImageFilter.GaussianBlur(radius = 2 ) 高斯模糊
ImageFilter.UnsharpMask(radius = 2,percent = 150,threshold = 3 ) 不清晰的掩模濾鏡 ImageFilter.MinFilter(size = 3 ) 最小值濾波
ImageFilter.MedianFilter(size = 3 ) 中值濾波
ImageFilter.ModeFilter(size = 3 ) 模式濾波
🌻 小實體2
from PIL import Image,ImageFilter
img=Image.open('p2.jpg')
w,h=img.size
#創建一個影像
img_output=Image.new('RGB',(2*w,h))
img_output.paste(img,(0,0))
filters=[]
img_filter1=img.filter(ImageFilter.GaussianBlur) #高斯濾鏡
img_filter2=img.filter(ImageFilter.EDGE_ENHANCE) #邊緣增強濾鏡
img_filter3=img.filter(ImageFilter.FIND_EDGES) #尋找邊緣濾鏡
filters.append(img_filter1)
filters.append(img_filter2)
filters.append(img_filter3)
for img_filter in filters:
img_output.paste(img_filter,(w,0))
img_output.show()
結果對比展示

邊緣增強濾鏡:
尋找邊緣濾鏡:

🍉ImageChops模塊
在 Pillow 庫的內置模塊 ImageChops 中包含了多個用于實作圖片合成的函式,
這些合成功能是通過計算通道中像素值的方式來實作的,
其主要用于制作特效、合成圖片等操作,常用的內置函式如下所示:
(1)相加函式 add(),功能是對兩張圖片進行算術加法運算,語法如下所示:
ImageChops.add(image1,image2,scale = 1.0,offset = 0 )
在合成后影像中的每個像素值,是兩幅影像對應像素值依據下面的公式進行計算得到的,
out = ((image1 + image2) / scale
(2)減法函式 subtract(),功能是對兩張圖片進行算術減法運算,語法如下所示:
ImageChops.subtract(image1,image2,scale = 1.0,offset = 0 )
在合成后影像中的每個像素值,是兩幅影像對應像素值依據下面的公式進行得到的,
out = ((image1 - image2) / scale + offset
🌻實體運用一
我們先看看原圖片,圖片一定選好,不然修出來的圖片不忍直視,


from PIL import Image,ImageChops
#打開圖片
img1=Image.open('p2.jpg')
img2=Image.open('p3.jpg')
#對兩張圖片進行算術加法運算
ImageChops.add(img1,img2).show()
#對兩張圖片進行算術減法運算
ImageChops.subtract(img1,img2).show()
結果展示:
加法運算:有點復古感的感覺了昂

減法運算:有點電影感了昂
🌻其他函式
(3)變暗函式 darker(),功能是比較兩個圖片的像素,取兩張圖片中對應像素的較小值,所以合成時兩幅影像中對應位置的暗部分得到保留,而去除亮部分,
具體語法如下所示:
ImageChops.darker(image1,image2 )
像素的計算公式如下所示:
out = min(image1, image2)
運用1:
from PIL import Image,ImageChops
#打開圖片
img1=Image.open('p2.jpg')
img2=Image.open('p3.jpg')
#使用darker()函式
ImageChops.darker(img1,img2).show()

(4)變亮函式 lighter(),與變暗函式 darker()相反,功能是比較兩個圖片(逐像素比較), 回傳一幅新的圖片,這幅新的圖片是將兩張圖片中較亮的部分疊加得到的,也就是說,在某 一點上,兩張圖中哪個的值大(亮)則取之,具體語法如下所示:
ImageChops.lighter(image1,image2 )
函式 lighter()與函式 darker()的功能相反,計算后得到的影像是兩幅影像對應位置的亮部分, 像素的計算公式如下所示:
out = max(image1,image2)
運用2:
from PIL import Image,ImageChops
#打開圖片
img1=Image.open('p2.jpg')
img2=Image.open('p3.jpg')
#變亮函式lighter()函式
ImageChops.lighter(img1,img2).show()
這個效果蠻好的哈,

(5)疊加函式 multiply(),功能是將兩張圖片互相疊加,
如果用純黑色與某圖片進行疊加操作,就會得到一幅純黑色的圖片,
如果用純白色與圖片作疊加,則圖片不受影響,具體語法
ImageChops.multiply(image1,image2 )
合成的影像的效果類似兩張圖片在透明的描圖紙上疊放在一起觀看的效果,其對應像素的計 算公式如下所示:
out = image1 * image2 / MAX
運用三 :
from PIL import Image,ImageChops
#打開圖片
img1=Image.open('p3.jpg')
img2=Image.open('p2.jpg')
#兩張圖片相互疊加multiply
ImageChops.multiply(img1,img2).show()
結果:
(6)螢屏函式 screen(),功能是先反色后疊加,實作合成影像的效果,就像將兩張幻燈片用 兩臺投影機同時投影到一個螢屏上的效果,具體語法如下所示:
ImageChops.screen(image1,image2 )
其對應像素的計算公式如下所示:
out = MAX - ((MAX - image1) * (MAX - image2) / MAX
視覺疲勞了,換圖!


from PIL import Image
from PIL import ImageChops
#打開圖片
imga=Image.open('p1.jpg')
imgb=Image.open('p4.jpg')
#實作反色后疊加
ImageChops.screen(imga,imgb).show()
運行結果:意境感噌噌的上來了,

(7)反色函式 invert(),類似于集合操作中的求補集,最大值為 Max,每個像素做減法,取 出反色,在反色時將用 255 減去一幅影像的每個像素值,從而得到原來影像的反相,也就是 說,其表現為“底片”性質的影像,具體語法如下所示:
ImageChops.invert(image)
其對應像素的計算公式如下所示:
out = MAX - image
🌻運用4 不推薦使用昂,除非想看女朋友的骨頭
from PIL import Image,ImageChops
#打開圖片
img1=Image.open('p3.jpg')
img2=Image.open('p2.jpg')
#反色invert()
ImageChops.invert(img1).show()
運行結果展示;

(8)比較函式 difference(),可以逐像素做減法操作,計算出絕對值,函式 difference()能夠 兩幅影像的對應像素值相減后的影像,對應像素值相同的,則為黑色,函式 difference()通常 用來找出影像之間的差異,具體語法如下所示:
ImageChops.difference(image1,image2 )
其對應像素的計算公式如下所示:
out = abs(image1 - image2)
🌻運用5
from PIL import Image,ImageChops
#打開圖片
img1=Image.open('p1.jpg')
img2=Image.open('p2.jpg')
#比較函式difference()
ImageChops.difference(img2,img2).show()
🍉ImageEnhance模塊使用
內置的 ImageEnhance 模塊中包含了多個用于增強影像效果的函式,主要用來調整影像 的色彩、對比度、亮度和清晰度等,感覺上和調整電視機的顯示引數一樣,
在模塊 ImageEnhance 中,所有的圖片增強物件都實作一個通用的介面,
這個介面只包 含如下一個方法, 方法 enhance()會回傳一個增強的 Image 物件,引數 factor 是一個大于 0 的浮點數,1 表 示回傳原始圖片,
當在 Python 程式中使用模塊 ImageEnhance 增強影像效果時,需要首先創建對應的增強 調整器,然后呼叫調整器輸出函式,根據指定的增強系數(小于 1 表示減弱,大于 1 表示增 強,等于 1 表示原圖不變)進行調整,最后輸出調整后的影像, 在模塊 ImageEnhance 中,常用的內置函式所示:
(1)ImageEnhance.Color(image ):功能是調整影像色彩平衡,相當于彩色電視機的 第 14 頁 色彩調整,實作了上邊提到的介面的 enhance 方法,
(2)ImageEnhance.Contrast(image ):功能是調整影像對比度,相當于彩色電視機的 對比度調整,
(3)ImageEnhance.Brightness(image ):功能是調整影像亮度,
(4)ImageEnhance.Sharpness(image ):功能是調整影像清晰度,用于銳化/鈍化圖片, 銳化操作的 factor 是 0~2 之間的一個浮點數,當 factor=0 時,回傳一個模糊的圖片對 象;當 factor=2 時,回傳一個銳化的圖片物件;當 factor=1 時,回傳原始圖片物件,
🌻運用-使用 ImageEnhance 實作影像色彩平衡
from PIL import Image,ImageEnhance
#打開影像
img=Image.open('p1.jpg')
w,h=img.size
img_output=Image.new('RGB',(3*w,h))
#將原圖復制到(0,0)
img_output.paste(img,(0,0))
#獲取色彩調整器
img_color=ImageEnhance.Color(img)
imgb=img_color.enhance(1.5)
img_output.paste(imgb,(w,0))
#減弱色彩
imgc=img_color.enhance(0.5)
img_output.paste(imgc,(2*w,0))
img_output.show()
結果對比展示:

🌻 運用-使用 ImageEnhance 實作影像亮度
from PIL import Image,ImageEnhance
#打開影像
img=Image.open('p2.jpg')
w,h=img.size
img_output=Image.new('RGB',(3*w,h))
#將原圖復制到(0,0)
img_output.paste(img,(0,0))
#獲取亮度調整器
img_bright=ImageEnhance.Brightness(img)
imgb=img_bright.enhance(1.5)
img_output.paste(imgb,(w,0))
#減弱亮度
imgc=img_bright.enhance(0.5)
img_output.paste(imgc,(2*w,0))
img_output.show()

最后
看都看完了,這不反手給個三連?拿去給女朋友修圖試試,說不定......嘿嘿嘿
代碼也可通過公眾號獲取:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/419979.html
標籤:AI
上一篇:(五)比賽中的CV演算法(下5)檢測網路調優(1)多尺度特征融合
下一篇:YOLOV5 環境搭建和使用記錄
