计算机视觉(opencv)实战三——图像运算、cv2.add()、cv2.addWeighted()


图像运算详解:加法运算与加权运算

在数字图像处理中,图像运算是基础且常用的操作之一。它能够对两幅图像或图像与常数进行加减乘除,从而实现亮度调整、融合叠加、特效制作等功能。本文将重点介绍 OpenCV 中的图像加法运算与加权运算,包括它们的底层规则与区别。

 先准备两张图片:


1. 图像加法运算

图像加法运算可以用两种方式实现:

  • 直接使用 + 号运算符

  • 使用 cv2.add() 函数

虽然它们的写法类似,但处理结果有差异

+ 号运算规则(NumPy 方式)

当使用 + 对两个图像的像素进行加法时,遵循 取模(mod 256)规则

  • 如果某个像素位置的两个值相加后 小于 255,则结果等于它们的和;

  • 如果某个像素位置的两个值相加后 大于 255,结果会被截断,并对 256 取模,例如:

    250 + 10 = 260   →   260 - 256 = 4即:260   →   4

代码示例:

import cv2a = cv2.imread('penguin.jpg')
c = a + 10  # 整体亮度+10
cv2.imshow('a+10', c)
cv2.waitKey(0)

特点:

  • 会产生“回绕”现象(高亮区域变暗)。

结果:


cv2.add()运算

原理:

cv2.add() 是 OpenCV 提供的逐像素加法运算函数,用于将两幅图像或图像与常数进行加法处理。

在数学上,它实现的是:

当使用 cv2.add() 时,规则不同:

  • 如果相加结果 小于 255,则直接为相加之和;

  • 如果相加结果 大于 255,则直接 饱和为 255(不会回绕)。


主要特性

  1. 逐像素加法

    • 对图像中每个像素点分别计算 src1_pixel + src2_pixel

    • 适用于单通道(灰度)和多通道(BGR、RGBA)图像。

  2. 饱和运算(Saturation Arithmetic)

    • 如果加法结果大于 255,则直接设为 255。

    • 不会出现 + 号运算那种 取模回绕 现象。

    • 这保证了图像亮度不会出现意外变暗。

  3. 支持图像与常数相加

    • 如果要整体调亮,可以加上一个常数矩阵,常数会广播到每个像素。


基本语法

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

参数说明:

  • src1, src2
    输入的两幅图像(大小、通道数必须一致),也可以是常数矩阵。

  • dtype
    可选,输出图像的数据类型;若为 None 则和输入相同。

  • mask
    可选掩膜,只在掩膜为非零的区域执行加法,其余区域保持原值。


代码示例:

d = a[0:500,500:1000]+b[0:500,0:500]
e = cv2.add(a[0:500,500:1000],b[0:500,0:500])  # 使用 cv2.add()
cv2.imshow('a+b',d)
cv2.imshow('add(a,b)',e)
cv2.waitKey(0)

切割:

[0:500, 500:1000]表示数组切片,选取图像的某个矩形区域。

  • 0:500 → 高度方向(y 轴):从第 0 行到第 499 行(共 500 行)

  • 500:1000 → 宽度方向(x 轴):从第 500 列到第 999 列(共 500 列)

结果:

解析:([255,255,255]为白色)

a+b的结果图片像素数值会回绕

add(a,b)则会饱和到255


2. cv2.addWeighted()图像加权运算

有时我们需要将两幅图像按比例融合,而不是简单相加。这时就可以使用 加权和 公式:

  • α(alpha):第一幅图像的权重

  • β(beta):第二幅图像的权重

  • γ(gamma):亮度偏移值(常数)

基本语法

dst = cv2.addWeighted(src1, alpha, src2, beta, gamma)

参数说明

参数说明
src1第一张输入图像(矩阵)
alpha第一张图像的权重系数
src2第二张输入图像(矩阵),大小、通道必须与 src1 相同
beta第二张图像的权重系数
gamma亮度调整常数,直接加到最终结果上

代码示例:

a = cv2.resize(a, (800, 600))
b = cv2.resize(b, (800, 600))# α = 0.6, β = 0.4, γ = 10
f = cv2.addWeighted(a, 0.6, b, 0.4, 10)
cv2.imshow('addWeighted', f)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:

  • 0.6 和 0.4 表示 a 图像占 60%,b 图像占 40%。

  • γ = 10 表示整体亮度提升 10。


3. 三种方式对比

方法溢出处理方式应用场景
+(NumPy)取模(回绕)特殊视觉效果、循环色彩变换
cv2.add()饱和到 255普通加法、避免溢出
cv2.addWeighted()饱和到 255(带权重和亮度调节)图像融合、透明度调整

4. 注意事项

  1. 两幅图像必须 大小相同、通道数一致,否则需先使用 cv2.resize() 统一尺寸。

  2. 如果仅调整亮度,cv2.convertScaleAbs() 也可以实现,更快更安全。

  3. 加权运算的 α 与 β 不一定要加起来等于 1,但一般这样可以避免过度曝光。


5. 应用实例

  • 图像融合:将两张风景图柔和地合成一张。

  • 特效制作:用 NumPy 加法制造像素回绕的炫彩效果。

  • 亮度调节:用 cv2.addWeighted() 调节透明度和亮度。

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

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

相关文章

Redis核心架构

一、核心模块如图 Client 客户端,官方提供了 C 语言开发的客户端,可以发送命令,性能分析和测试等。网络层事件驱动模型,基于 I/O 多路复用,封装了一个短小精悍的高性能 ae 库,全称是 a simple event-driven…

Python爬虫大师课:HTTP协议深度解析与工业级请求封装

Python爬虫大师课:HTTP协议深度解析与工业级请求封装 从零构建企业级爬虫框架(附完整源码) 一、爬虫基础:网络世界的通行证 ​​HTTP协议核心数据​​: 全球网站数量:20亿 HTTP请求占比:83% …

机器学习——PCA(主成分分析)降维

PCA(主成分分析)降维详解一、什么是 PCAPCA(Principal Component Analysis,主成分分析)是一种常用的数据降维方法。它通过线性变换将原始的高维数据映射到低维空间,同时尽可能保留原数据的主要信息&#xf…

把 AI 装进“冰箱贴”——基于超低功耗语音合成的小屏电子价签

标签:电子价签、语音合成、TTS、超低功耗、电子墨水、BLE、离线语音 ---- 1. 背景:价签也要开口说话? 超市做促销,顾客拿价签一扫,“今日番茄 2.99 元/斤,会员再享 9 折” 直接语音播放。 硬件限制&#xf…

挖漏洞是什么意思?挖漏洞赚钱入门到精通,收藏这篇就够了!

挖漏洞是什么意思?挖漏洞赚钱入门到精通,收藏这篇就够了! 什么是漏洞挖掘 漏洞挖掘是指通过分析软件、系统或网络中存在的安全漏洞来发现并利用这些漏洞。漏洞挖掘是信息安全领域的一项重要工作,可以帮助企业和组织提高系统的安…

如何理解AP中SM中宿主进程?

在AUTOSAR Adaptive Platform(AP)中,状态管理(State Management, SM)的宿主进程(Host Process) 是实现状态机运行的核心载体,其本质与运作机制可通过以下结构化解析深入理解&#xf…

无人机光电探测模块技术分析

一、技术要点1. 多光谱成像技术 可见光与红外融合:白天依赖可见光高分辨率成像(识别外形、颜色),夜间或低光照条件下切换至红外热成像(捕捉0.5℃级温差),通过双波段互补提升全天候能力。 激光…

第40周——GAN入门

目录 目录 目录 前言 一、定义超参数 二、下载数据 三、配置数据 四、定义鉴别器 五、训练模型并保存 总结 前言 🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 一、定义超参数 import argparse import os i…

Nginx性能优化与安全配置:打造高性能Web服务器

系列文章索引: 第一篇:《Nginx入门与安装详解:从零开始搭建高性能Web服务器》第二篇:《Nginx基础配置详解:nginx.conf核心配置与虚拟主机实战》第三篇:《Nginx代理配置详解:正向代理与反向代理…

二分算法(模板)

例题1: 704. 二分查找 - 力扣(LeetCode) 算法原理:(二分) 通过遍历也可以通过,但是二分更优且数据量越大越能体现。 二分思路: 1.mid1 (left right)/2 与 mid2 right (right …

VUE3 学习笔记2 computed、watch、生命周期、hooks、其他组合式API

computed 计算属性在vue3中,虽然也能写vue2的computed,但还是更推荐使用vue3语法的computed。在Vue3中,计算属性是组合式API,要想使用computed,需要先对computed进行引入:import { computed } from vuecomp…

【java面试day13】mysql-定位慢查询

文章目录问题💬 Question 1相关知识问题 💬 Question 1 Q:这条sql语句执行很慢,你如何分析呢? A:当一条 SQL 执行较慢时,可以先使用 EXPLAIN 查看执行计划,通过 key 和 key_len 判…

3分钟解锁网页“硬盘“能力:离线运行VSCode的新一代Web存储技术

Hi,我是前端人类学(之前叫布兰妮甜)! “这不是浏览器,这是装了个硬盘。” —— 用户对现代Web应用能力的惊叹 随着Origin Private File System和IndexedDB Stream等新技术的出现,Web应用现在可以在用户的设…

LT6911GXD,HD-DVI2.1/DP1.4a/Type-C 转 Dual-port MIPI/LVDS with Audio 带音频

简介LT6911GXD是一款高性能HD-DVI2.1/DP1.4a/Type-c转Dual-port MIPI/LVDS芯片,兼容 HDMI2.1、HDMI2.0b、HDMI1.4、DVI1.0、DisplayPort 1.4a、eDP1.4b 等多种视频接口标准。支持4K(38402160)60Hz的DSC直通。应用场景AR/VR设备LT6911GXD 支持高达 4K(384…

【100页PPT】数字化转型某著名企业集团信息化顶层规划方案(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 https://download.csdn.net/download/2501_92808811/91662628 资料解读:数字化转型某著名企业集团信息化顶层规划方案 详细资料请看本解读文章的最后内容 作为企业数字化转型领域的…

高精度标准钢卷尺优质厂家、选购建议

高精度标准钢卷尺的优质厂家通常具备精湛工艺与权威精度认证等特征,能为产品质量提供保障。其选购需兼顾精度标识、使用场景、结构细节等多方面,具体介绍如下:一、高精度标准钢卷尺优质厂家**1、河南普天同创:**PTTC-C5标准钢卷尺…

38 C++ STL模板库7-迭代器

C STL模板库7-迭代器 文章目录C STL模板库7-迭代器一、迭代器的核心作用二、迭代器的五大分类与操作三、关键用法与代码示例1. 迭代器的原理2. 迭代器用法与示例3. 迭代工具用法示例4. 使用技巧迭代器是C中连接容器与算法的通用接口,提供了一种访问容器元素的统一方…

【0基础3ds Max】学习计划

3ds Max 作为一款功能强大的专业 3D 计算机图形软件,在影视动画、游戏开发、建筑可视化、产品设计和工业设计等众多领域有着广泛的应用。 目录前言一、第一阶段:基础认知(第 1 - 2 周)​二、第二阶段:建模技术学习&…

用 Enigma Virtual Box 将 Qt 程序打包成单 exe

上一篇介绍了用windeployqt生成可运行的多文件程序,但一堆文件分发起来不够方便。有没有办法将所有文件合并成一个 exe? 答案是肯定的 用Enigma Virtual Box工具就能实现。本文就来讲解如何用它将 Qt 多文件程序打包为单一 exe,让分发更轻松。 其中的 一定要选 第二个 一…

【LeetCode 热题 100】45. 跳跃游戏 II

Problem: 45. 跳跃游戏 II 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说&#xff0c;如果你在索引 i 处&#xff0c;你可以跳转到任意 (i j) 处&#xff1a; 0 < j < nums[i] 且 i j &…