【OpenCV + VS】用addWeighted实现图像线性融合
在OpenCV图像处理中,图像融合是最基础且常用的技术之一,广泛应用于特效制作、图像拼接、水印添加等场景。本文将聚焦核心函数addWeighted,详细拆解其语法规则、实现原理。
一、图像线性融合的核心原理
图像线性融合本质是通过权重分配,将两张图像按比例叠加,生成新的混合图像。其数学公式如下:
dst = src1 × alpha + src2 × beta + gamma
dst:融合后的目标图像src1、src2:待融合的两张源图像(需满足尺寸、类型一致)alpha:src1的权重(0~1之间,值越大src1越清晰)beta:src2的权重(0~1之间,值越大src2越清晰)gamma:亮度调节因子(通常设为0.0,可根据需求调整整体亮度)
关键原则:为保证融合后图像亮度正常,通常设置 alpha + beta = 1,避免像素值溢出导致画面过亮或失真。
二、核心函数addWeighted语法详解
addWeighted是OpenCV专门用于线性融合的API,语法格式和参数说明如下:
1. 函数原型
void cv::addWeighted(InputArray src1, // 第一张源图像double alpha, // 第一张图像的权重InputArray src2, // 第二张源图像double beta, // 第二张图像的权重double gamma, // 亮度调节因子OutputArray dst, // 融合后的目标图像int dtype = -1 // 目标图像数据类型(默认-1,与src1一致)
);
2. 参数详细说明
| 参数名 | 类型 | 说明 |
|---|---|---|
src1 | InputArray | 输入图像1,支持Mat等OpenCV图像格式,需与src2尺寸、通道数完全一致 |
alpha | double | 图像1的权重系数,范围通常为[0,1],控制图像1在融合结果中的清晰度 |
src2 | InputArray | 输入图像2,要求与src1的宽、高、通道数(如单通道/三通道)完全匹配 |
beta | double | 图像2的权重系数,范围通常为[0,1],与alpha互补(alpha + beta = 1) |
gamma | double | 叠加后的亮度偏移量,可正可负(正值提亮,负值变暗),默认0.0 |
dst | OutputArray | 输出的融合图像,无需提前初始化,函数会自动分配内存 |
