1.差異影像 :
即兩幅圖像對應像素的差的絕對值。
在python中,利用cv2.imread輸入圖像,數據類型爲np.uint8,在進行圖像運算之前,需要轉爲浮點型np.float32,然後進行相減,在利用cv2.convertScaleAbs轉爲圖像類型np.uint8.
t1=np.array([[100,255],[255,100]],dtype=np.float32) t2=np.array([[255,100],[100,255]],dtype=np.float32) print np.subtract(t1,t2) print t1-t2
np.subtract、np.add和直接用+、-符號是一樣的
print cv2.convertScaleAbs(t1-t2)
用convertScaleAbs()函數將其轉回原來的uint8形式。
convertScaleAbs()函數的運算過程:先求絕對值,絕對值大於255的結果就是255,絕對值在0到255的爲絕對值本身
注:千萬不能使用numpy進行類型轉換(t.astype(np.uint8)和np.uint8(t)一樣)
2.圖像加減:
使用 cv2.add() 和 cv2.subtract()
t1=np.array([[250,250],[250,250]],dtype=np.uint8) t2=np.array([[10,10],[10,10]],dtype=np.uint8) print cv2.add(t1,t2)
t1=np.array([[250,250],[250,250]],dtype=np.uint8) t2=np.array([[10,10],[10,10]],dtype=np.uint8) print cv2.subtract(t1,t2) print cv2.subtract(t2,t1)
加減運算過程: 加減的結果若是在0到255之間,結果不變;小於0的爲0,大於255的爲255
另外,還有 cv2.addWeighted()函數:
cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])
其中alpha是第一幅圖片中元素的權重,beta是第二個的權重,gamma是加到最後結果上的一個值。
t1=np.array([100,100],dtype=np.uint8) t2=np.array([100,100],dtype=np.uint8) print cv2.addWeighted(t1,0.4,t2,0.6,100)
結果爲:[[200],[200]]