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

目录

  • 一、cv2.subtract()函数
  • 二、cv2.subtract(image,blurred)和(image-blurred)处理效果对比
    • 2.1 代码
    • 2.2 输出结果
  • 三、总结

一、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函数提取高频信息,高效省事。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/689239.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【18-Ⅰ】Head First Java 学习笔记

HeadFirst Java 本人有C语言基础,通过阅读Java廖雪峰网站,简单速成了java,但对其中一些入门概念有所疏漏,阅读本书以弥补。 第一章 Java入门 第二章 面向对象 第三章 变量 第四章 方法操作实例变量 第五章 程序实战 第六章 Java…

Windows Nginx 服务器部署并推流

环境 开发环境:windows 开发工具:ffmpeg、nginx、nginx-rmtp-module、vlc media player Nginx Nginx是一个高性能的HTTP和反向代理web服务器,并且支持rtmp,不过rtmp是作为一个nginx的一个模块。 对于linux系统,需要另…

Spring MVC分页示例

Spring MVC分页示例 分页用于在不同部分显示大量记录。在这种情况下,我们将在一页中显示10、20或50条记录。对于其余记录,我们提供链接。 我们可以在Spring MVC中简单地创建分页示例。在此分页示例中,我们使用MySQL数据库来获取记录。 创建…

Django性能之道:缓存应用与优化实战

title: Django性能之道:缓存应用与优化实战 date: 2024/5/11 18:34:22 updated: 2024/5/11 18:34:22 categories: 后端开发 tags: 缓存系统Redis优点Memcached优缺点Django缓存数据库优化性能监控安全实践 引言 在当今的互联网时代,用户对网站和应用…

Java --- 集合(2)--- 这篇文章让你学会如何使用List集合

本期文章来自黑马程序员以及Java入门到精通,希望各位大佬发现文章的瑕疵及时表出,另外也感谢您的收看。话不多说,直接进入正题...... 目录 一.List集合的使用: 二.三种遍历List方式: 首先还是给大家呈现这幅图&#x…

IDEA创建SpringBoot项目仅支持JDK17及以上版本的解决方案

背景 IDEA创建SpringBoot项目仅支持JDK17及以上版本的解决方案 原因 由于SpringBoot3.x.x版本的到来,官方称将来17及以上版本将成为主流,但是大多数的项目仍然使用JDK8。 1.解决方案一 将https://start.spring.io/或者http://start.springboot.io/替…

Java医院绩效考核系统源码B/S+avue+MySQL助力医院实现精细化管理 医院综合绩效核算系统源码

Java医院绩效考核系统源码B/SavueMySQL助力医院实现精细化管理 医院综合绩效核算系统源码 医院绩效考核系统目标是实现对科室、病区财务指标、客户指标、流程指标、成长指标的全面考核、分析,并与奖金分配、学科建设水平评价挂钩。 具体功能模块包括收入核算、成本…

快递物流查询:如何实现快递批量查询?这些技巧助你轻松应对

在日常生活和工作中,我们经常需要查询快递物流信息,尤其是当面对大量的快递包裹时,逐一查询无疑会耗费大量的时间和精力。这时,实现快递批量查询就显得尤为重要。本文将为你介绍办公提效工具一些实现快递批量查询的技巧&#xff0…

《十日终焉》中的定律整理-向虫队学习(举例+持续更新)

1、二八定律 二八定律,又称帕累托法则,也叫巴莱多定律。 是19世纪末20世纪初意大利经济学家巴莱多发明的。其中指出,约仅有20%的因素影响80%的结果。也就是说:所有变因中,最重要的仅有20%,虽然剩余的80%占…

2.2、Gitea忘记密码重置密码

忘记密码后,管理员可以使用gitea的主程序输入命令重置密码。 gitea admin user change-password --username myname --password asecurepassword

基于RFID的博物馆藏品管理系统

传统的博物馆藏品管理主要依赖人工记录和物理检查,这样的管理方式耗时耗力,并且容易出现记录错误。另外,对于藏品的定位和监控也存在一定的局限性。 RFID是一种无线通信技术,通过无线电频率识别标签上存储的信息,实现物…

计算机字符集产生的历史与乱码

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…