• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

Python 使用 PIL.Image 疊合兩張影像教學與範例

介紹如何在 Python 中使用 PIL.Image 的 blend() 或 composite() 函數以半透明的方式合併兩張影像。


如果要將兩張影像重疊起來,將兩張影像變成半透明之後合併起來,可以使用 PIL.Image.blend() 函數來處理,以下是處理的步驟。

測試用圖片

以下是本文中用來測試的兩張圖片。

測試圖片一
測試圖片一
測試圖片二
測試圖片二

更改影像大小

在合併之前,必須先確認兩張影像的大小都是一致的。

from PIL import Image

# 載入兩張影像
img1 = Image.open("image1.jpg")
img2 = Image.open("image2.jpg")

# 檢查兩張影像大小是否一致
print(img1.size)
print(img2.size)
(720, 480)
(720, 480)

如果兩張影像大小不同,可以考慮使用 resize() 調整影像大小:

# 指定目標圖片大小
imgSize = (720, 480)

# 改變影像大小
img1.resize(imgSize)
img2.resize(imgSize)

另一種方式是採用 crop() 函數將兩張影像裁切成相同的大小:

# 指定裁切大小
cropBox = (
    0,   # left
    0,   # upper
    720, # right
    480  # lower
)

# 裁切影像
img1.crop(cropBox)
img2.crop(cropBox)

疊合影像

準備好兩張相同大小的影像之後,即可使用 blend() 函數進行影像的疊合,而在疊合影像時要指定一個 alpha 值(代表透明度),blend() 函數會依照以下公式進行影像的疊合:

out = image1 * (1.0 - alpha) + image2 * alpha

以下是 alpha 指定為 0.5 的範例:

# 疊合影像
blendImg = Image.blend(img1, img2, alpha = 0.5)

# 顯示影像
blendImg.show()
疊合影像
疊合影像

不同的 alpha 值會有不同的效果:

# 疊合影像
blendImg = Image.blend(img1, img2, alpha = 0.3)

# 顯示影像
blendImg.show()
疊合影像
疊合影像

遮罩疊合影像

若要搭配遮罩來疊合兩張影像,可以再另外準備好遮罩之後,改用 composite() 函數來處理。遮罩影像的格式可以是黑白圖片("1")、灰階圖片("L")或含透明度的彩色圖片("RGBA"),以下是產生遮罩的範例:

from PIL import ImageDraw, ImageFilter

# 產生遮罩影像
maskImg = Image.new("L", (720, 480))

# 繪製遮罩區域
maskDraw = ImageDraw.Draw(maskImg)
maskDraw.ellipse((50, 50, 470, 430), fill=255)

# 模糊化
maskImg = maskImg.filter(ImageFilter.GaussianBlur(30))

# 顯示遮罩影像
maskImg.show()
遮罩影像
遮罩影像

有了遮罩影像之後,即可使用 composite() 函數套用遮罩疊合影像:

# 套用遮罩疊合影像
Image.composite(img1, img2, maskImg)
套用遮罩疊合影像
套用遮罩疊合影像

參考資料

  • csdn:【python】PIL.Image.blend() 的使用

分類:Python

讀者互動方式

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

主要資訊欄

搜尋

近期文章

  • C++ 語言使用 Crypto++ 實作 RSA 數位簽章教學與範例
  • C++ 語言使用 Crypto++ 實作 RSA-OAEP 搭配 SHA256 加密教學與範例
  • C++ 語言使用 Crypto++ 實作 AES 加密、解密、認證加密教學與範例
  • C++ 語言使用 Crypto++ 實作 MD5、SHA1、SHA2、BLAKE2 雜湊教學與範例
  • Ubuntu Linux 安裝、使用 Crypto++ 加密函式庫教學與範例
  • C 語言使用 OpenSSL 實作橢圓曲線 ECDH 金鑰交換教學與範例
  • Python 以 eciespy 實作 ECC 非對稱式加密方法教學與範例
  • C 語言使用 OpenSSL 實作 PBKDF2 教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide