OpenCV-Python图像的减法运算cv2.subtract函数详解以及和矩阵减
OpenCV-Python图像的减法运算cv2.subtract函数详解以及和矩阵减法的差异对比
? ? 前往老猿Python博文目录 ?
在《OpenCV-Python图像的加法运算cv2.add函数详解》详细介绍了图像的加法运算,有加法就有减法,本文介绍图像的减法运算。
图像的减法通常用于查找图像的差异,如医学上血管的影像和造影后的血管影像比对就可以看出血液流动的情况,当然减法也可以用在图像的特殊处理上。
调用语法:
subtract(src1, src2, dst=None, mask=None, dtype=None)
参数说明:
减法的参数与加法类似:
src1:作为被减数的图像数组或一个标量
src2:作为减数的图像数组或一个标量
dst:可选参数,输出结果保存的变量,默认值为None,如果为非None,输出图像保存到dst对应实参中,其大小和通道数与输入图像相同,图像的深度(即图像像素的位数)由dtype参数或输入图像确
mask:图像掩膜,可选参数,为8位单通道的灰度图像,用于指定要更改的输出图像数组的元素,即输出图像像素只有mask对应位置元素不为0的部分才输出,否则该位置像素的所有通道分量都设置为0
dtype:可选参数,输出图像数组的深度,即图像单个像素值的位数(如RGB用三个字节表示,则为24位)。
返回值:相减的结果图像
两个图像矩阵相减, 要求两个矩阵必须有相同大小和通道数
dst(I)=saturate(src1(I)?src2(I))if mask(I)≠0
1个图像矩阵和1个标量相减, 要求src2是标量或者与src1的通道数相同的元素个数,经实际测试应该是一个四元组,如果src1是3通道的,则按通道顺序依次与该四元组的前3个元素相减
dst(I)=saturate(src1(I)?src2)if mask(I)≠0
1个标量和一个图像数组相减, 要求src1是标量或者与src1的通道数相同的元素个数
dst(I)=saturate(src1?src2(I))if mask(I)≠0
在给定值减去矩阵的SubRS情况下,为1个标量和一个图像数组相减的反向差,老猿认为这是第二种场景的一种特殊解读
dst(I)=saturate(src2?src1(I))if mask(I)≠0
以上运算过程理解存在疑问的,请参考《opencv图像处理学习随笔:帮助文档运算公式中saturate的含义》。
下面的两张图,后者是前者基础上增加了两处文字和一处曲线: