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

Opencv中的addweighted函数

一.addweighted函数作用

addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值(如亮度调整)。它常用于实现图像混合、特效叠加、亮度调节等视觉效果,在计算机视觉应用中广泛用于创建透明效果、淡入淡出过渡或图像增强等场景。

1.函数定义

void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst);

参数:
   src1: 第一个输入图像(数组),必须是相同尺寸和类型(如8位无符号整型)的图像

   alpha: 第一个图像的权重系数(double类型),决定 src1 在融合中的贡献程度。例如,α=0.5 表示                             src1 占据50%权重

   src2: 第二个输入图像(数组),尺寸和通道数必须与 src1 完全匹配

   beta: 第二个图像的权重系数(double类型),决定 src2 在融合中的贡献程度。例如,
β=0.5表示 src2 占据50%权重

   gamma: 标量值(double类型),添加到每个像素上,常用于调整输出图像的全局亮度。例如,γ=0 不改变亮度,γ>0 增加亮度。
   dst: 输出图像(数组),尺寸和类型与输入相同,存储融合结果。

函数执行的运算是基于每个像素点的线性加权和。数学公式如下:

dst(i,j)=α×src1(i,j)+β×src2(i,j)+γ            简化公式就是:dst=α∗src1+β∗src2+γ

src1(i,j) 和 src2(i,j)src2(i,j) 分别表示两个输入图像在位置 (i,j)(i,j) 的像素值。

α 是第一个图像的权重(浮点数)。

β 是第二个图像的权重(浮点数)。

γ是添加到每个像素的标量值(通常用于调整整体亮度)。

dst(i,j)dst(i,j) 是输出图像在位置 (i,j)(i,j) 的像素值。 公式确保结果通过 saturate_cast<uchar> 处理(防止像素值溢出255),避免无效的像素值

权重和与 γγ的作用:α 和 β 之和通常为1以实现平滑融合(如 α+β=1),但并非绝对要求。γ 可独立调整亮度,这类似于在融合后加一个常数偏移

2.例子

c++中

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    // 读取图像
    Mat img1 = imread("image1.jpg", IMREAD_COLOR);
    Mat img2 = imread("image2.jpg", IMREAD_COLOR);
    Mat dst;  // 输出图像

    // 调用addWeighted:alpha=0.1, beta=0.9, gamma=10(增加少量亮度)
    addWeighted(img1, 0.1, img2, 0.9, 10, dst);

    // 保存输出
    imwrite("output.jpg", dst);
    return 0;
}

二.实战

在实战中,我们两个图片的融合分为两个情况,一种是两张照片大小不一样,一种是大小一样

大小一样的我们就可以只用使用addweighted函数融合,不需要建立感兴趣区,大小不一样的则需要。

int main(int argc, char * argv[])
{//命令行中选入照片Mat src1=imread(argv[1]);//src1原图像的数据Mat src2=imread(argv[2]); //src2是LOGO图像的数据//判断src1长度和src2是否相同,若不同则进行以下操作if(src1.size!=src2.size)//不相同就需要建立感兴趣区{Mat image_roi=src1(Rect(30,30,src2.cols,src2.rows));//在原图像中截取一个可感兴趣区域,感兴趣区域double alpha =0.4;//alpha第一个图像的权重值,这里是0.4double beta = 1-alpha;//beta是第二个图像权重值,1- alpha = 0.6,第二个图像的清晰度较高int gama =0;//gamma默认为0,>0就是增强光感addWeighted(image_roi,alpha,src2,beta,gama,image_roi);//调用addWeighted对src1和src2进行图像融合imwrite("addweighted_norsamesize.jpg",src1);}else//大小一样,是融合之后生成一张新的照片{double alpha = 0.4;//alpha第一个图像的权重值,这里是0.4double beta = 1 - alpha;//beta是第二个图像权重值,1- alpha = 0.6,第二个图像的清晰度较高int gamma = 0; Mat dst;addWeighted(src1, alpha , src2, beta, gamma, dst); //调用addWeighted对src1和src2进行图像融合imwrite("addweighted_samesize.jpg", dst);}

1.大小不一样的图片融合

2.大小一样的图片融合

http://www.xdnf.cn/news/900217.html

相关文章:

  • OpenCV 图像色彩空间转换与抠图
  • VTK如何让部分单位不可见
  • uniapp 安卓 APP 后台持续运行(保活)的尝试办法
  • 【Veristand】Veristand环境安装教程-Linux RT / Windows
  • OpenCV为图像添加边框
  • MVC与MVP设计模式对比详解
  • PCB特种工艺应用扩展:厚铜、高频与软硬结合板
  • 加法c++
  • 【驱动】Orin NX恢复备份失败:does not match the current board you‘re flashing onto
  • 【网络安全】Qt免杀样本分析
  • 令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
  • ReadWriteLock(读写锁)和 StampedLock
  • tpc udp http
  • 自动化提示生成框架(AutoPrompt)
  • 零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
  • AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
  • 【AUTOSAR COM CAN】CanSM模块的实现与应用解析
  • 对象存储Ozone EC应用和优化
  • 大语言模型提示词(LLM Prompt)工程系统性学习指南:从理论基础到实战应用的完整体系
  • 装饰模式(Decorator Pattern)重构java邮件发奖系统实战
  • leetcode_206 反转链表
  • PDF转Markdown/JSON软件MinerU最新1.3.12版整合包下载
  • 元图CAD:一键解锁PDF转CAD,OCR技术赋能高效转换
  • 网络安全逆向分析之rust逆向技巧
  • 不到 2 个月,OpenAI 火速用 Rust 重写 AI 编程工具。尤雨溪也觉得 Rust 香!
  • 三十四、面向对象底层逻辑-SpringMVC九大组件之FlashMapManager接口设计哲学
  • C#学习第28天:内存缓存和对象池化
  • vscode使用系列之快速生成html模板
  • CANFD 数据记录仪在汽车售后解决偶发问题故障的应用
  • 浪潮交换机配置track检测实现高速公路收费网络主备切换NQA