OpenCV学习之cv2.subtract函数
一、简介
cv2.subtract
是 OpenCV 库中的一个基本函数,用于对两幅图像进行逐像素
的减法操作。
二、基本语法
cv2.subtract(src1, src2, dst=None, mask=None, dtype=None)
三、参数说明
-
src1
(numpy.ndarray): 第一幅输入图像或数组。 -
src2
(numpy.ndarray): 第二幅输入图像或数组,与src1
具有相同的尺寸和类型。 -
dst
(numpy.ndarray, 可选): 输出图像或数组。如果不指定,结果将存储在新的数组中。 -
mask
(numpy.ndarray, 可选): 可选操作掩码,指定操作区域。掩码是一个二值图像,与处理图像相同的尺寸。
- 白色区域(值为255):表示将进行操作的区域。
- 黑色区域(值为0):表示不会进行操作的区域,输出图像这部分区域像素值置0。
-
dtype
(int, 可选): 可选的输出数组类型。如果未指定,则默认为输入数组的类型。
三、返回值
返回一个与输入图像 src1
和 src2
具有相同尺寸的数组,该数组包含对应位置的差值。
四、示例
示例 1: 在实际图像上使用 cv2.subtract
import cv2# 读者更改路径即可,但是要保证两幅图像的尺寸相同
image1 = cv2.imread('2015.jpg')
image2 = cv2.imread('2015.jpg')# 计算图像差
result = cv2.subtract(image1, image2)# 显示结果
cv2.imshow('Image 1', image1)
cv2.imshow('Image 2', image2)
cv2.imshow('Subtracted Image', result)
cv2.waitKey(0)
示例 3: 使用掩码进行减法操作
import cv2
import numpy as np# 创建两幅示例图像
image1 = np.ones((5, 5), dtype=np.uint8) * 100
image2 = np.ones((5, 5), dtype=np.uint8) * 50# 创建掩码
mask = np.zeros((5, 5), dtype=np.uint8)
mask[1:4, 1:4] = 255 # 该区域进行减法操作# 计算图像差
result = cv2.subtract(image1, image2, mask=mask)print("图像1:\n", image1)
print("图像2:\n", image2)
print("掩码:\n", mask)
print("减法结果:\n", result)
五、注意事项
-
数据类型:
cv2.subtract
函数会自动处理溢出和截断问题。例如,当结果为负数时,像素值会被截断为 0;当结果超过最大值时,像素值会被截断为 255。
-
图像尺寸:
- 输入图像的尺寸必须相同,否则会抛出错误。