更新時間:2021年05月26日15時50分 來源:傳智教育 瀏覽次數(shù):
你可以使用OpenCV的cv.add()函數(shù)把兩幅圖像相加,或者可以簡單地通過numpy操作添加兩個圖像,如res = img1 + img2。兩個圖像應該具有相同的大小和類型,或者第二個圖像可以是標量值。
注意:OpenCV加法和Numpy加法之間存在差異。OpenCV的加法是飽和操作,而Numpy添加是模運算。
參考以下代碼:
>>> x = np.uint8([250]) >>> y = np.uint8([10]) >>> print( cv.add(x,y) ) # 250+10 = 260 => 255 [[255]] >>> print( x+y ) # 250+10 = 260 % 256 = 4 [4]
這種差別在你對兩幅圖像進行加法時會更加明顯。OpenCV 的結果會更好一點。所以我們盡量使用 OpenCV 中的函數(shù)。
我們將下面兩幅圖像:
代碼:
import numpy as np import cv2 as cv import matplotlib.pyplot as plt # 1 讀取圖像 img1 = cv.imread("view.jpg") img2 = cv.imread("rain.jpg") # 2 加法操作 img3 = cv.add(img1,img2) # cv中的加法 img4 = img1+img2 # 直接相加 # 3 圖像顯示 fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100) axes[0].imshow(img3[:,:,::-1]) axes[0].set_title("cv中的加法") axes[1].imshow(img4[:,:,::-1]) axes[1].set_title("直接相加") plt.show()
結果如下所示:
這其實也是加法,但是不同的是兩幅圖像的權重不同,這就會給人一種混合或者透明的感覺。圖像混合的計算公式如下:
g(x) = (1−α)f0(x) + αf1(x)
通過修改 α 的值(0 → 1),可以實現(xiàn)非常炫酷的混合。
現(xiàn)在我們把兩幅圖混合在一起。第一幅圖的權重是0.7,第二幅圖的權重是0.3。函數(shù)cv2.addWeighted()可以按下面的公式對圖片進行混合操作。
dst = α⋅img1 + β⋅img2 + γ
這里γ取為零。
參考以下代碼:
import numpy as np import cv2 as cv import matplotlib.pyplot as plt # 1 讀取圖像 img1 = cv.imread("view.jpg") img2 = cv.imread("rain.jpg") # 2 圖像混合 img3 = cv.addWeighted(img1,0.7,img2,0.3,0) # 3 圖像顯示 plt.figure(figsize=(8,8)) plt.imshow(img3[:,:,::-1]) plt.show()
窗口將如下圖顯示:
總結
圖像加法:將兩幅圖像加載一起
cv.add()
圖像的混合:將兩幅圖像按照不同的比例進行混合
cv.addweight()
注意:這里都要求兩幅圖像是相同大小的。
添加QQ:435946716獲取全套《OpenCV視頻教程》。
猜你喜歡: