iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
佛心分享-IT 人自學之術

OpwnCV影像處理新手村系列 第 11

🌅 DAY 11:影像混合|addWeighted 圖像融合效果

  • 分享至 

  • xImage
  •  

影像混合(Image Blending)是一種將兩張圖片依照特定比例融合的技術,
常用於影像合成、特效製作以及圖像過渡動畫。
OpenCV 提供 cv2.addWeighted() 方法,能輕鬆完成圖片的融合運算。


🖼️ 測試圖片準備

準備兩張相同尺寸的彩色圖片,例如 image1.jpgimage2.jpg,放在同一資料夾中。

import cv2
import numpy as np

# 讀取兩張圖片
img1 = cv2.imread("image1.jpg") 
img2 = cv2.imread("image2.jpg")

cv2.imshow("Image 1", img1)
cv2.imshow("Image 2", img2)

# 放最後面
cv2.waitKey()
cv2.destroyAllWindows()

💡 注意:cv2.addWeighted() 要求兩張圖片的大小與通道數必須相同,
若不同,可用 cv2.resize() 調整尺寸。

原圖示例:
https://ithelp.ithome.com.tw/upload/images/20250914/20129482CkiD3q7NuN.png


🔄 圖像融合

cv2.addWeighted() 的公式為:

result = img1 * α + img2 * β + γ
  • α:第一張圖片的權重(0 ~ 1)
  • β:第二張圖片的權重(0 ~ 1)
  • γ:亮度調整值(通常設為 0)

三個範例:

  1. 第一張圖佔 70%,第二張圖佔 30%。
  2. 第一張圖佔 50%,第二張圖佔 50%。
  3. 第一張圖佔 30%,第二張圖佔 70%。
# 圖像融合
blended1 = cv2.addWeighted(img1, 0.7, img2, 0.3, 0)
blended2 = cv2.addWeighted(img1, 0.5, img2, 0.5, 0)
blended3 = cv2.addWeighted(img1, 0.3, img2, 0.7, 0)

cv2.imshow("Blended Image 1", blended1)
cv2.imshow("Blended Image 2", blended2)
cv2.imshow("Blended Image 3", blended3)

cv2.waitKey()
cv2.destroyAllWindows()

這裡用三種不同權重配置來做圖片融合,融合後的圖片如下:
https://ithelp.ithome.com.tw/upload/images/20250914/20129482ZuSSR5pa09.png


🎨 動態融合效果

我們還可以利用迴圈動態改變 α 與 β,產生圖片漸變效果:

for alpha in np.linspace(0, 1, 20):
    beta = 1 - alpha
    blended = cv2.addWeighted(img1, alpha, img2, beta, 0)
    cv2.imshow("Dynamic Blend", blended)
    cv2.waitKey(100)  # 每張延遲 100ms

cv2.destroyAllWindows()

這種效果常用於淡入淡出(Fade In/Out)動畫或圖片切換。


📌 今日結語

  • cv2.addWeighted() 是影像融合的核心函數,簡單調整 α 與 β 即可控制融合比例。
  • 兩張圖片必須具有相同的大小與通道數,否則需先進行裁切或縮放。
  • 動態改變權重可以製作流暢的影像過渡動畫。
  • 在影像特效與影片製作中,融合技術能帶來平滑的視覺效果。

上一篇
🚀 DAY 10:圖片加解密|bitwise_xor 影像加密與解密
下一篇
🌅 DAY 12:影像平滑與模糊化|blur、GaussianBlur、medianBlur
系列文
OpwnCV影像處理新手村14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言