調整圖片亮度、對比、飽和度和銳利度
這篇文章會介紹使用 Python Pillow 函式庫裡的 ImageEnhance 模組,調整圖片的亮度、對比、飽和度和銳利度。
- 本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
- 使用 Colab 操作需要連動 Google 雲端硬碟,請參考:連動 Google Drive
安裝 Pillow
輸入下列指令安裝 Pillow,根據個人環境使用 pip 或 pip3,如果使用 Colab 或 Anaconda Jupyter,已經內建 Pillow 函式庫。
!pip install Pillow
關於 ImageEnhance
Pillow 函式庫裡的 ImageEnhance 模組包含了四種增強影像的方法,分別是亮度 ( Brightness )、對比 ( Contrast )、飽和度 ( Color ) 和銳利度 ( Sharpness ),數值如果為 1 表示原始影像效果,使用方法如下:
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from PIL import Image, ImageEnhance
img = Image.open("oxxostudio.png") # 開啟影像
brightness = ImageEnhance.Brightness(img) # 設定 img 要加強亮度
output = brightness.enhance(factor) # 調整亮度,factor 為一個浮點數值
# 調整後的數值 = 原始數值 x factor
調整圖片亮度並儲存
延伸上面的用法,搭配 Pillow 內建的 save 方法,就能將調整後的圖片存檔。
from PIL import Image, ImageEnhance
img = Image.open("mona.jpg") # 開啟影像
brightness = ImageEnhance.Brightness(img) # 設定 img 要加強亮度
output = brightness.enhance(1.5) # 提高亮度
output.save('mona_b15.jpg') # 存檔
output = brightness.enhance(0.5) # 降低亮度
output.save('mona_b05.jpg') # 存檔
調整圖片亮度、對比、飽和度和清晰度
了解 ImageEnhance 的用法後,就能編輯程式,調整圖片的亮度、對比、飽和度和銳利度,下方的程式碼將同一張圖片,以八種不同參數進行調整,並透過 matplotlib 一次顯示八張圖片 ( 參考:同時顯示多張圖片 )。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import matplotlib.pyplot as plt
from PIL import Image, ImageEnhance
img = Image.open("oxxostudio.jpg")
brightness = ImageEnhance.Brightness(img) # 調整亮度
contrast = ImageEnhance.Contrast(img) # 調整對比
color = ImageEnhance.Color(img) # 調整飽和度
sharpness = ImageEnhance.Sharpness(img) # 調整銳利度
output_b5 = brightness.enhance(5) # 提高亮度
output_b05 = brightness.enhance(0.5) # 降低亮度
output_c5 = contrast.enhance(5) # 提高對比
output_c05 = contrast.enhance(0.5) # 降低對比
output_color5 = color.enhance(5) # 提高飽和度
output_color01 = color.enhance(0.1) # 降低飽和度
output_s15 = sharpness.enhance(15) # 提高銳利度
output_s0 = sharpness.enhance(0) # 降低銳利度
plt.figure(figsize=(15,10)) # 改變圖表尺寸
plt.subplot(241) # 建立 4x2 子圖表的上方從左數來第一個圖表
plt.imshow(output_b5)
plt.title('brightness:5')
plt.subplot(242) # 建立 4x2 子圖表的上方從左數來第二個圖表
plt.imshow(output_b05)
plt.title('brightness:0.5')
plt.subplot(243) # 建立 4x2 子圖表的上方從左數來第三個圖表
plt.imshow(output_c5)
plt.title('contrast:5')
plt.subplot(244) # 建立 4x2 子圖表的上方從左數來第四個圖表
plt.imshow(output_c05)
plt.title('contrast:0.5')
plt.subplot(245) # 建立 4x2 子圖表的下方從左數來第一個圖表
plt.imshow(output_color5)
plt.title('color:5')
plt.subplot(246) # 建立 4x2 子圖表的下方從左數來第二個圖表
plt.imshow(output_color01)
plt.title('color:0.1')
plt.subplot(247) # 建立 4x2 子圖表的下方從左數來第三個圖表
plt.imshow(output_s15)
plt.title('sharpness:15')
plt.subplot(248) # 建立 4x2 子圖表的下方從左數來第四個圖表
plt.imshow(output_s0)
plt.title('sharpness:0')
plt.show()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~