OpenCV学习之cv2.subtract函数

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, 可选): 可选的输出数组类型。如果未指定,则默认为输入数组的类型。

三、返回值

返回一个与输入图像 src1src2 具有相同尺寸的数组,该数组包含对应位置的差值。

四、示例

示例 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)

五、注意事项

  1. 数据类型:

    • cv2.subtract 函数会自动处理溢出和截断问题。例如,当结果为负数时,像素值会被截断为 0;当结果超过最大值时,像素值会被截断为 255。
  2. 图像尺寸:

    • 输入图像的尺寸必须相同,否则会抛出错误。

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

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

相关文章

上海市计算机学会竞赛平台2023年6月月赛丙组差分求和

题目描述 给定一个整数序列,对其中任意两个数,计算后项减前项的差,输出这些差的差。 例如对于 𝑎1,𝑎2,𝑎3,𝑎4a1​,a2​,a3​,a4​ 来说,输出 (𝑎2−𝑎1)…

html2pdf.js生成PDF空白页面问题解决办法

现象 1、Scale参数1.8时,安卓手机在20页以上可能爆掉生成空白页 2、Scale参数1.8时,苹果手机在5页以上可能爆掉生成空白页 原因是浏览器支持画布的尺寸大小限制 解决办法 分页生成,一个元素一页这样不可能超过限制尺寸。 查到解决代码&a…

代码随想录算法训练营第四十五天|198.打家劫舍 213.打家劫舍II 337.打家劫舍III

LeetCode 198.打家劫舍 题目链接:198.打家劫舍 踩坑:很多坑,自动把它当作背包问题了,但其实这就是一个普通的动态规划题目,背包问题本质上是一个二维问题,只是可以简化成一维,想要抽象为背包问…

探索Scala的类型奥秘:协变与逆变全解析

🔄 探索Scala的类型奥秘:协变与逆变全解析 在Scala的强类型系统中,协变(covariance)和逆变(contravariance)是两个核心概念,它们允许我们在泛型编程中更灵活地使用类型。本文将深入…

03-权限绕过漏洞

一、基础知识 水平越权 水平越权是指用户在系统中拥有超出其权限范围的访问权限。这可能导致安全漏洞和潜在的风险,因为用户可以访问他们不应该有权访问的敏感信息或执行他们不应该执行的操作。 垂直越权 垂直越权是指用户或攻击者利用系统中的漏洞或错误配置&a…

【横穿自动驾驶】读书笔记

我自己,有时候还是有些眼高手低的,但是技术领域多读书大概是没错的。 最近想读完下面这两本书: Feedback control of dynamic systemAlgorithms for Optimization 第二本不用多说,就是求解优化问题的方法综述。横穿自动驾驶系列…

webform 连接连接数据的操作

web-form 查询数据库 ,从配置文件中读取字符信息 查询 // 从配置文件中读取数据 string sqlstr // 获取数据库连接字符串ConfigurationManager.ConnectionStrings["staffConnectionString2"].ConnectionString;DataTable dt new DataTable(); // 存储…

《零信任时代的网络安全:2024年的新挑战与机遇》

《零信任时代的网络安全:2024年的新挑战与机遇》 引言 随着数字化转型的深入,网络安全的重要性日益凸显。零信任模型作为新一代网络安全架构,其核心理念是“永不信任,始终验证”。2024年,零信任模型已经成为企业网络…

Build Redundancy at Every Tier(在每一层构建冗余)

Build Redundancy at Every Tier(在每一层构建冗余) 什么是冗余? 冗余指的是在系统的不同层次(或组件)中添加备用资源或备份,以确保在部分组件发生故障时,系统仍然能够正常运行。 为什么大型…

Orangepi Zero2使用外设驱动库wiringOP配合定时器驱动SG90舵机

目录 一、舵机的基本认知和硬件接线 1.1 舵机的基本认知: 1.2 硬件接线: 1.3 怎么控制舵机旋转不同的角度: 二、Linux定时器 2.1 定时器setitimer()函数原型和头文件: 2.2 信号处理函数signal()原型和头文件: 2…

<电力行业> - 《第10课:变电》

1 变电 变电环节,顾名思义就是改变电压的环节,主要是在变电站和变电所完成的。变电站和变电所主要区别在于:变电站比变电所更大。 发电厂的变压器和配电变压器也属于“变电”,但我们在说电网环节时,变电特指电网公司…

嵌入式软件常用测试工具

嵌入式软件常用的测试工具和方法可以总结如下: 测试工具 GDB: 描述:GDB是一个开源的调试工具,常用于GNU编译器集合中,支持多种编程语言,如C、C、Java等。功能:通过命令行与目标应用程序进行交…

【STM32嵌入式系统设计与开发---传感器拓展】——1_4_标准库FreeRTOS移植实验

目录 雅俗理解源码下载链接知识拓展步骤1:stm32f103vet6移植freeRTOS步骤:(1)准备开发环境(2)添加FreeRTOS移植 致谢 雅俗理解 雅:FreeRTOS是一个开源的实时操作系统(RTOS)&#xf…

支持向量机(SVM)在机器学习中的简单示例

目录 工作原理 核函数 SVM用于分类 结果分析 结论 ❤❤❤动动发财的小手点点赞点点关注哦~~~❤❤❤ 支持向量机是一种强大的监督学习模型,用于分类和回归任务。它通过找到数据点之间的最优边界来区分不同的类别。SVM特别适用于那些具有清晰边界但线性不可分的…

Codeforces Beta Round 7 C. Line 题解 数论 扩展欧几里得

Line 题目描述 A line on the plane is described by an equation A x B y C 0 AxByC0 AxByC0 . You are to find any point on this line, whose coordinates are integer numbers from − 5 ⋅ 1 0 18 -510^{18} −5⋅1018 to 5 ⋅ 1 0 18 510^{18} 5⋅1018 inclusiv…

RabbitMQ-交换机的类型以及流程图练习-01

自己的飞书文档:‌‍‬‍‬‍​‍‬​⁠‍​​​‌⁠​​‬‍​​​‬‬‌​‌‌​​​​​​‍​‍​‌⁠‬​RabbitMQ的流程图和作业 - 飞书云文档 (feishu.cn) 作业 图片一张 画rabbit-mq 消息发…

测试开发工程师需要掌握什么技能?

测试开发工程师是软件开发中至关重要的角色之一。他们负责编写、维护和执行自动化测试脚本、开发测试工具和框架,以确保软件的质量和稳定性。为了成为一名优秀的测试开发工程师,你需要掌握以下技能: 1. 编程技能: 作为测试开发工…

LabVIEW程序员应该怎么提高自己的工作能力?

作为一名LabVIEW程序员,提升工作能力可以从以下几个方面入手: 1. 深入理解LabVIEW基础 掌握LabVIEW编程语言:熟悉LabVIEW的图形化编程方式,理解其数据流编程模型。熟悉常用的VI(虚拟仪器)和函数&#xff1…

计算机网络原理及应用

第一章 计算机网络概述 【1】局域网 局域网是指在某一区域内由多台计算机互联而成的计算机通信网络。 【1】互通 两个网络之间可以交换数据。 第二章 计算机网络的体系结构 【1】语义 何时发出何种控制信息,完成何种动作以及做出何种响应。 【2】简述网络协…

redis删除通配的keys

删除通配kubiex:market:history_data_swap_的所有key 注:如果有很多键,手动删除会比较麻烦,可以使用 Lua 脚本来批量删除: ~# redis-cli -h ip -a 127.0.0.1:6379> EVAL "return redis.call(del, unpack(redis.call(keys…