根據前面的介紹,可以知道,圖片讀取之后一個數組,numpy是經過優化了的進行快速矩陣運算的包,其中numpy.array結構針對數組操作有很好的優化。所以變相理解成圖片是由矩陣組成。在高等代數或者高數里邊,都會學到對矩陣進行加減乘除等算術運算,同樣經過opencv處理的圖片也是可以進行相應的算數運算。
1.圖像加法。cv2.add()
使用cv2.add()將兩幅圖像進行加法運算,也可以直接使用numpy,res=img1+img2.兩幅圖像的大小,類型必須一致,或者第二個圖像可以是一個簡單的標量值。
openCV的加法是一種飽和操作,例如“相加等于260,結果是255
而numpy的加法是一種模操作,例如“相加等于260,結果是260%255=4
x=np.uint8([250])
y=np.uint8([10])
print(cv2.add(x,y))#250+10=260>=255
#結果為[[255]]
print (x+y) #250+10=260%255=4
#結果為[4]
PS:OpenCV的結果會更好,so盡量使用OpenCV中的函數
2.圖像混合 。cv2.addWeighted()
這也是加法,不同的是兩幅圖像的權重不同,這會給人一種混合或者透明的感覺。圖像混合的計算公式如下:
通過修改α的值(0-->1),可以實現很酷的混合。
例:將兩幅圖像混合,第一幅權重為0.7.第二幅權重為0.3。函數cv2.addWeighed()可以按下面的公式對圖片進行混合。
dst = α·img1 + β·img2+γ ,這里γ的取值為0.
img1 = cv.imread('ml.png')
img2 = cv.imread('opencv-logo.png')
dst = cv.addWeighted(img1,0.7,img2,0.3,0)
cv.imshow('dst',dst)
cv.waitKey(0)
cv.destroyAllWindows()
3.按位運算
這里包括按位操作有:AND,OR,NOT,XOR等,當我們提取圖像的一部分,選擇非矩形ROI時,會很有用(下章)。下面進行如何改變一幅圖的特定區域。