OpenCV 的 `cv2.addWeighted()` 可以用權重混合兩張圖片。當兩張圖片尺寸相同時,開發者可以指定第一張圖片與第二張圖片的比例,產生透明疊加或融合效果。
cv2.addWeighted 是什麼?
`cv2.addWeighted()` 是 OpenCV 用來做加權影像融合的函數。輸出結果會依照兩張圖片的權重與 gamma 偏移值計算。
常見公式可以理解為:
```text
result = src1 alpha + src2 beta + gamma
```
主要參數:
| 參數 | 說明 |
|---|---|
| `src1` | 第一個輸入圖像 |
| `alpha` | 第一個輸入圖像的權重 |
| `src2` | 第二個輸入圖像 |
| `beta` | 第二個輸入圖像的權重 |
| `gamma` | 加到結果上的亮度偏移 |
若想要兩張圖片各佔 50%,可以設定 `alpha=0.5`、`beta=0.5`、`gamma=0`。
如何用 OpenCV 混合兩張圖片?
OpenCV 混合兩張圖片時,要先讀取圖片,再用 `cv2.addWeighted()` 指定權重。兩張圖片必須尺寸相同,否則會出現錯誤。
範例:
```python
import cv2
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
result = cv2.addWeighted(img1, 0.5, img2, 0.5, 0)
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```

本文的實務判斷是:先確認圖片大小與通道數一致,再調整權重。若要做淡入淡出動畫,可以逐步改變 `alpha` 與 `beta`。
cv2.addWeighted 常見錯誤怎麼避免?
`cv2.addWeighted()` 最常見錯誤是兩張圖片尺寸不同或通道數不同。混合前先 resize 或轉換色彩通道,可以避免多數問題。
常見檢查:
```python
print(img1.shape)
print(img2.shape)
```
若尺寸不同,可先調整:
```python
img2 = cv2.resize(img2, (img1.shape[1], img1.shape[0]))
```
若其中一張是灰階圖,另一張是彩色圖,需要先統一通道數。
常見問題
cv2.addWeighted 可以混合不同大小的圖片嗎?
`cv2.addWeighted()` 不能直接混合不同大小的圖片。混合前要先用 `cv2.resize()` 或裁切方式讓兩張圖片尺寸一致。
alpha 和 beta 一定要加起來等於 1 嗎?
alpha 和 beta 不一定要加起來等於 1,但加起來等於 1 時最容易得到直覺的透明混合效果。若總和超過 1,結果可能變亮或飽和。
gamma 參數有什麼用途?
gamma 是加到輸出結果上的亮度偏移。一般圖像融合常設為 0,除非需要整體調亮或調暗。
addWeighted 可以用來做浮水印嗎?
`cv2.addWeighted()` 可以用來做浮水印或透明疊圖。若只想混合局部區域,需要先建立 ROI 或遮罩。
OpenCV 讀不到圖片怎麼辦?
若 `cv2.imread()` 回傳 `None`,通常是路徑錯誤、檔案不存在或格式不支援。先檢查檔案路徑與工作目錄。
參考資料
- OpenCV Core array operations:https://docs.opencv.org/4.x/d2/de8/groupcorearray.html
最後更新
Wed Dec 21 2022 08:00:00 GMT+0800 (Taiwan Standard Time)
延伸閱讀
關於作者 {#author}
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2022-12-21