即两幅图像对应像素的差的绝对值。
在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)一样)
使用 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]]