OpenCv中cv2.subtract(image,blurred)与(image-blurred)的区别

一、cv2.subtract()函数

cv2.subtract是OpenCV库中的一个函数,用于进行图像减法运算。它可以很方便地进行两个图像之间的减法操作,也可以用来对一个图像进行常量的减法操作。

函数的调用语法如下:

cv2.subtract(src1, src2, dst=None, mask=None, dtype=None)

参数说明:

src1:作为被减数的图像数组或一个标量。

src2:作为减数的图像数组或一个标量。

dst:可选参数,输出结果保存的变量,默认值为None,如果为非None,输出图像保存到dst对应实参中,其大小和通道数与输入图像相同,图像的深度(即图像像素的位数)由dtype参数或输入图像确定。

mask:图像掩膜,可选参数,为8位单通道的灰度图像,用于指定要更改的输出图像数组的元素,即输出图像像素只有mask对应位置元素不为0的部分才输出,否则该位置像素的所有通道分量都设置为0。

dtype:可选参数,输出图像数组的深度,即图像单个像素值的位数(如RGB用三个字节表示,则为24位)。

二、cv2.subtract(image,blurred)和(image-blurred)处理效果对比

2.1 代码

import cv2
image = cv2.imread('Images/Visible_Images/1.jpg')

# 使用高斯滤波器进行滤波
blurred = cv2.GaussianBlur(gray, (5,5), 0)

# 计算高频残差图像
residual_1 = gray - blurred
residual = cv2.subtract(image, blurred)

cv2.imshow("original",original)
cv2.imshow("residual_1",residual_1)
cv2.imshow("residual",residual)

cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 输出结果

下面左图为原图,中间图为(image-blurred)方法处理结果,右图为cv2.subtract(image,blurred)处理结果。

在这里插入图片描述

分析:

从上面的输出结果可以看出直接使用(image-blurred),即矩阵减法在出现负数时,由于类型是uint8,负数会变成256加该负数的值,导致差异很大,也就是像素值溢出,高频信息提取较差。使用(image-blurred)这种方法,必须通过if语句对(image-blurred)差值进行限制,如果差值小于0就赋值为0,如果差值大于255赋值为255。

cv2.subtract(image,blurred)处理结果较好的提取出了高频信息,cv2.subtract函数的结果比直接使用矩阵减法更自然和平滑,它能够确保结果始终在有效的图像数据范围内。如果计算的结果小于0或大于最大值(如255对于8位图像),它会将结果裁剪到有效范围。这可以防止数据溢出,并确保结果总是有效的图像数据。

三、总结

通过上面对比分析,建议直接使用cv2.subtract函数提取高频信息,高效省事。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佐咖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值