更新時(shí)間:2021-05-26 來源:黑馬程序員 瀏覽量:
你可以使用OpenCV的cv.add()函數(shù)把兩幅圖像相加,或者可以簡單地通過numpy操作添加兩個(gè)圖像,如res = img1 + img2。兩個(gè)圖像應(yīng)該具有相同的大小和類型,或者第二個(gè)圖像可以是標(biāo)量值。
注意:OpenCV加法和Numpy加法之間存在差異。OpenCV的加法是飽和操作,而Numpy添加是模運(yùn)算。
參考以下代碼:
>>> 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]
這種差別在你對(duì)兩幅圖像進(jìn)行加法時(shí)會(huì)更加明顯。OpenCV 的結(jié)果會(huì)更好一點(diǎn)。所以我們盡量使用 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()結(jié)果如下所示:

這其實(shí)也是加法,但是不同的是兩幅圖像的權(quán)重不同,這就會(huì)給人一種混合或者透明的感覺。圖像混合的計(jì)算公式如下:
g(x) = (1?α)f0(x) + αf1(x)
通過修改 α 的值(0 → 1),可以實(shí)現(xiàn)非常炫酷的混合。
現(xiàn)在我們把兩幅圖混合在一起。第一幅圖的權(quán)重是0.7,第二幅圖的權(quán)重是0.3。函數(shù)cv2.addWeighted()可以按下面的公式對(duì)圖片進(jìn)行混合操作。
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()窗口將如下圖顯示:

總結(jié)
圖像加法:將兩幅圖像加載一起
cv.add()
圖像的混合:將兩幅圖像按照不同的比例進(jìn)行混合
cv.addweight()
注意:這里都要求兩幅圖像是相同大小的。
猜你喜歡:
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計(jì)】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計(jì)連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運(yùn)營】深圳跨境電商運(yùn)營畢業(yè)22個(gè)工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運(yùn)維】鄭州運(yùn)維1期就業(yè)班,畢業(yè)14個(gè)工作日,班級(jí)93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19