opencv的算術運算

根據前面的介紹,可以知道,圖片讀取之后一個數組,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時,會很有用(下章)。下面進行如何改變一幅圖的特定區域。


?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容