影像疊加在圖像處理中非常實用,可以用於圖像融合、添加水印、背景替換等
cv2.addWeighted(scr1, alpha, src2, beta, gamma)
對兩幅圖像進行加權和,適用於混合和合成圖片
cv2.add(src1, src2)
兩圖像逐象素相加(將兩幅圖像中對應位置的像素值相加,形成一個新的圖像)
cv2.subtract(src1, src2)
兩圖像逐象素相減(用來強調圖像之間的差異,或是去除背景圖像等)
使用 addWeighted
疊加影像,需要大小一致的兩圖,因此這邊我做了一個判斷,確認兩圖大小是否一致,若一致才會使用 addWeighted
否則會先使用 cv2.resize
使兩圖大小相同
程式內容:
import cv2
img1 = cv2.imread('bird.jpg')
img2 = cv2.imread('sea.jpg')
# 取得兩圖片大小
height1, width1 = img1.shape[:2]
height2, width2 = img2.shape[:2]
# 判斷兩張圖片的尺寸是否一致
if (height1, width1) != (height2, width2):
# 將小圖片調整與大圖大小相符
if width1 * height1 > width2 * height2:
img2 = cv2.resize(img2, (width1, height1))
else:
img1 = cv2.resize(img1, (width2, height2))
# 判斷條件(兩圖大小是否相同)是否為真,若不為真顯示圖片大小不同
assert img1.shape[:2] == img2.shape[:2], "Images sizes do not match."
# 設定兩圖加權值,並將疊加結果存入 blended_img
alpha = 0.5
beta = 0.5
blended_img = cv2.addWeighted(img1, alpha, img2, beta, 0)
cv2.imshow('Blended Image', blended_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
執行結果:
將兩幅圖像中對應位置的像素值相加,形成一個新的圖像
程式內容:
import cv2
import numpy as np
img1 = cv2.imread('bird.jpg')
img2 = cv2.imread('sea.jpg')
img1 = cv2.resize(img1, (300, 300))
img2 = cv2.resize(img2, (300, 300))
a = cv2.add(img1, img2)
cv2.imshow('Image 1', img1)
cv2.imshow('Image 2', img2)
cv2.imshow('Image 3', a)
cv2.waitKey(0)
執行結果:
程式內容:
import cv2
import numpy as np
img1 = cv2.imread('bird.jpg')
img2 = cv2.imread('difference.jpg')
# 將兩圖大小直接指定成 300x300 避免不必要的錯誤產生
img1 = cv2.resize(img1, (300, 300))
img2 = cv2.resize(img2, (300, 300))
difference = cv2.subtract(img2, img1)
cv2.imshow('Image 1', img1)
cv2.imshow('Image 2', img2)
cv2.imshow('Difference', difference)
cv2.waitKey(0)
執行結果:
圖片來源:
https://pixabay.com/
參考資料:
https://docs.opencv.org/4.x/index.html
https://steam.oxxostudio.tw/category/python/ai/opencv-add.html#google_vignette