(1)图像加法
cv2.add(src1, src2, dst=None, mask=None, dtype=None)
作用:将两个图片进行加和,大于255的使用255计数
src1 + src2
使用numpy中的矩阵加法来实现,相加的结果%256
cv2.addWeighted(src1, alpha, src2, beta, gamma)
作用:两张相同分辨率、相同文件类型的图片融合,可以设置图片的透明度
alpha为src1的透明度,beta为src2的透明度,gamma调节亮度参数
import cv2
import matplotlib.pyplot as plt
# 图像加法
p1 = cv2.imread("D:/Study/digital image processing/test/Lena.bmp")
p2 = cv2.imread("D:/Study/digital image processing/test/Goldhill.bmp")
res1 = cv2.add(p1,p2)
res1_1 = p1 + p2
# 图像融合
res2 = cv2.addWeighted(p1,0.3,p2,0.7,0)
cv2.imshow("p1",p1)
cv2.imshow("p2",p2)
cv2.imshow("res1",res1)
cv2.imshow("res1_1",res1_1)
cv2.imshow("res2",res2)
cv2.waitKey(0)
cv2.destroyAllWindows()
res1是cv2.add(p1,p2)产生的图像
res1_1是p1 + p2产生的图像
res2是p1、p2按照(0.3, 0.7)比例混合产生的图像
(2)图像减法
cv2.subtract(src1, src2, dst=None, mask=None, dtype=None)
作用:得出src1与src2两幅图片之间的差异图像,两幅图像见对像素的灰度值或彩色分量相减,用于目标检测
像素值<0,直接自动按照0处理
cv2.absdiff(src1,src2,[dst])
作用:得出src1与src2两幅图之间的差异图像,与cv2.subtract()的区别是,cv2.absdiff()计算两幅图的差的绝对值
p1 = cv2.imread("D:/Study/digital image processing/test/Lena_star.bmp")
p2 = cv2.imread("D:/Study/digital image processing/test/LenaRGB.bmp")
cv2.imshow("p1",p1)
cv2.imshow("p2",p2)
# p1与p2的差值
res1_1 = cv2.subtract(p1,p2)
# p2与p1的差值
res1_2 = cv2.subtract(p2,p1)
# p1与p2的差的绝对值(|p1-p2|=|p2-p1|)
res1_3 = cv2.absdiff(p1,p2)
cv2.imshow("res1_1",res1_1)
cv2.imshow("res1_2",res1_2)
cv2.imshow("res1_3",res1_3)
#
res2 = cv2.addWeighted(p1,1,p2,-1,0)
cv2.imshow("res2",res2)
cv2.waitKey(0)
cv2.destroyAllWindows()
res1_1是p1与p2的差值产生的图像
res1_2是p2与p1的差值产生的图像
res1_1是p1与p2的差的绝对值产生的图像
res2是p1和p2按照(1, -1)混合产生的图像
(3)图像乘法和除法
cv2.multiply(src1, src2, dst=None, scale=None, dtype=None)
作用:将两幅图像对应的灰度值或彩色分量进行相乘
像素值>255,直接自动按照255处理
cv2.divide(src1, src2, dst=None, scale=None, dtype=None)
作用:将两幅图像对应的灰度值或彩色分量进行相除
p1 = cv2.imread("D:/Study/digital image processing/test/rec1.bmp")
p2 = cv2.imread("D:/Study/digital image processing/test/rec2.bmp")
res = cv2.multiply(p1,p2)
cv2.imshow("p1",p1)
cv2.imshow("p2",p2)
cv2.imshow("res",res)
cv2.waitKey(0)
cv2.destroyAllWindows()