当前位置: 首页 > news >正文

OpenCV(十九):图像的加法运算

图像加法运算原理

图像加法的本质是对两幅图像的像素点逐一进行相加操作。假设两幅灰度图像 A(x,y) 和 B(x,y),它们的加法结果为:

在这里插入图片描述

若图像为三通道彩色图像(如 BGR),则运算在每个通道上独立进行:

在这里插入图片描述

但由于图像的像素值通常为 8 位无符号整数(0~255),因此在相加时可能会出现溢出问题。为此,OpenCV 和 NumPy 的处理方式不同。

OpenCV 与 NumPy 加法的区别

对比项cv2.add()NumPy + 运算
数据类型自动转换为饱和运算按模运算(溢出后循环)
溢出处理超过255自动设为255超过255后按256取模
用途图像处理(安全)数值计算(数学操作)

示例:

x = np.uint8([250])
y = np.uint8([10])print(cv2.add(x, y))  # 输出: [[255]] 饱和加法
print(x + y)          # 输出: [4]     溢出取模

在图像处理中,我们通常希望亮度不会因为加法而“回绕”,所以应使用 cv2.add() 而非直接用 +

加权加法与图像融合

在很多应用场景中,我们不仅仅是想把图像叠加,而是希望平滑地融合两张图像。这时可以使用 加权加法(Weighted Addition)

在这里插入图片描述

其中:

  • α、β 为两张图像的权重;
  • γ 为常数偏移量(控制整体亮度)。

在 OpenCV 中可用函数:

dst = cv2.addWeighted(img1, alpha, img2, beta, gamma)

示例:

blended = cv2.addWeighted(img1, 0.7, img2, 0.3, 0)

这样得到的图像会在两张图之间实现柔和过渡,比如可以用于图像淡入淡出、视频转场效果等。

典型应用场景

  1. 图像增强
    • 当图像亮度不足时,可以将图像本身与常量矩阵相加(如 cv2.add(img, 50)),提升整体亮度。
    • 或者与另一张高亮度图叠加,改善曝光不足的画面。
  2. 图像融合(Image Blending)
    • 常用于创建水印、视频转场、全景拼接时的边缘平滑融合。
    • 例如人脸合成、双曝光特效。
  3. 背景更新
    • 在运动检测或视频分析中,逐帧累加可以实现背景估计或光照补偿。
  4. 图像遮罩处理
    • 结合掩码(mask),仅在特定区域进行加法运算,实现局部亮度提升或特效叠加。

图像加法的注意事项

  1. 图像尺寸与通道必须一致
    若两张图像大小或通道数不同,必须先使用 cv2.resize()cv2.cvtColor() 调整,否则会报错。
  2. 数据类型要统一
    加法前建议使用 img.astype(np.uint8) 统一数据类型,否则可能出现异常结果或警告。
  3. 避免直接使用 NumPy 加法
    若用于视觉处理,应优先使用 cv2.add(),防止出现取模效果导致亮度不自然。
  4. 控制亮度范围
    加权加法时权重之和不一定要为1,但一般建议控制在合理范围(如 α + β = 1),否则图像可能过曝或过暗。

示例

import cv2
import numpy as np# 读取两张大小相同的图像
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')# 确保两张图片尺寸一致
if img1.shape != img2.shape:img2 = cv2.resize(img2, (img1.shape[1], img1.shape[0]))# --- 方法1:OpenCV 的加法(带饱和限制) ---
add_opencv = cv2.add(img1, img2)# --- 方法2:NumPy 的加法(按模运算) ---
add_numpy = img1 + img2# --- 方法3:加权加法(图像融合) ---
alpha = 0.6  # 第一张图权重
beta = 0.4   # 第二张图权重
gamma = 0    # 亮度调节值
add_weighted = cv2.addWeighted(img1, alpha, img2, beta, gamma)# 显示结果
cv2.imshow('Original Image 1', img1)
cv2.imshow('Original Image 2', img2)
cv2.imshow('Add (OpenCV)', add_opencv)
cv2.imshow('Add (NumPy)', add_numpy)
cv2.imshow('AddWeighted (Fusion)', add_weighted)cv2.waitKey(0)
cv2.destroyAllWindows()
http://www.dtcms.com/a/568475.html

相关文章:

  • 基于单相机的双目视觉三维重构项目:使用深度学习方法计算视差图
  • Unity UGC IDE实现深度解析(五):事件系统与消息传递
  • 苏州市建设工程交易中心网站网站开发设计总结及心得体会
  • 黑龙江省鹤岗市城乡建设局网站建站域名
  • soular零基础学习,如何实现TikLab工具链统一登录认证
  • Go语言设计模式:解释器模式详解
  • 深圳的游戏公司后端开发面经
  • 全新私域(微信)管理系统如何获取?
  • 《Godot轻量化开发的全流程进阶指南》
  • 首个开源方案:将 Godot 3D 游戏无缝嵌入 React Native 应用
  • Qt在线安装测试可用的国内代理
  • React Native第五章
  • 如何提高测试用例覆盖率?
  • 蒙古网站群建设html做的网站排版导致乱码
  • 【国产桌面操作系统】QT应用打deb包
  • React 12
  • 做网站 怎么发布专业模板建站哪家好
  • JavaSe—Set集合
  • 单调栈的“近亲”:用 O(n) 的「单调队列」征服「滑动窗口最大值」
  • Buildroot构建Linux系统根文件系统
  • 在自动驾驶数据闭环中的特征工程应用(上)
  • 【具身智能】Spatial Forcing 论文笔记 如何隐式地为 VLA 注入 3D 空间感知能力
  • 多模态技术深度探索:融合视觉与语言的AI新范式
  • 自动化单mysql多实例库的全量迁移脚本-v2版本
  • [CARLA系列--04]如何在Carla中去调用传感器模型--相机篇
  • 【ASP.NET MVC 进阶】DataAnnotations 特性验证全解析:从基础到避坑,让数据校验像 “安检“ 一样靠谱
  • 做ppt兼职的网站有哪些北京中燕建设公司网站
  • webgl 顶点、片元着色器传参,绘制彩色三角形
  • 实验室安全教育与管理平台学习记录(八)特种设备安全
  • 浙江网站制作国外翻墙设计网站