一、函数概述
cv2.subtract()函数是OpenCV中用于图像减法运算的函数,可以很方便地进行两个图像之间的减法操作,也可以用来对一个图像进行常量的减法操作。
cv2.subtract(src1, src2, dst=None, mask=None, dtype=None) -> dst
其中src1和src2是要进行减法操作的两个输入图像,可以是大小和类型相同的图像,也可以是大小不同但是通道数相同的图像;dst是函数的输出结果,如果不传入该参数,则会生成一个和输入图像类型和大小相同的图像作为输出结果;mask参数则可以用来指定一个掩膜,以只对指定区域进行减法运算;dtype参数则用来指定输出图像的数据类型,如果不传入该参数,则会自动选择src1、src2和输入图像中的数据类型中的最大值作为输出图像的数据类型。
二、图像减法操作
三、常量减法操作
cv2.subtract()函数不仅可以进行图像减法操作,还可以对一个图像进行常量减法操作。代码如下:
img = cv2.imread("lena.jpg")
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
result = cv2.subtract(255, img)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()
这里我们读入一张名为lena.jpg的图像,并将它显示出来。然后,我们对这张图像进行常量减法操作:将它的每个像素值从255中减去,并将结果保存到result中。最后将result显示出来。运行代码,可以得到如下图像:
原始图像:
减法结果:
可以看到,我们成功地对lena.jpg图像进行了常量减法操作,并且得到了一个新的图像。这是因为在常量减法操作中,每个像素值都会从常量值中减去,并生成一个新的图像。
四、掩膜减法操作
cv2.subtract()函数还支持使用掩膜对图像进行减法操作,以只对指定区域进行操作。代码如下:
img1 = np.zeros((200, 200, 3), dtype=np.uint8)
img1[50:150, 50:150, :] = 255
img2 = np.zeros((200, 200, 3), dtype=np.uint8)
img2[70:180, 70:180, :] = 255
mask = np.zeros((200, 200), dtype=np.uint8)
mask[90:110, 90:110] = 255
cv2.imshow("img1", img1)
cv2.imshow("img2", img2)
cv2.imshow("mask", mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
result = cv2.subtract(img1, img2, dst=None, mask=mask)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()
这里我们同样创建两个200x200的图像img1和img2,并用mask生成一个掩膜,指定要进行减法操作的区域。然后,我们使用cv2.subtract()函数对这两个图像进行减法操作,并指定掩膜为mask。运行代码,可以得到如下图像:
可以看到,我们成功地使用掩膜对img1和img2进行了减法操作,只对mask指定的部分进行了减法操作。这是因为在掩膜减法操作中,只有掩膜中像素值为非零的部分才会进行减法操作,因此我们成功地保留了img1中心部分的白色区域。