当前位置: 首页 > 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.大小一样的图片融合

相关文章:

  • [论文阅读] 人工智能 | 大语言模型计划生成的新范式:基于过程挖掘的技能学习
  • Linux-http协议
  • Xilinx 325T FPGA 中的 GT(GTP 或 GTX)收发器和普通 LVDS 接口的差模和共模电压
  • 软件功能测试报告都包含哪些内容?
  • 多线程下使用缓存+锁Lock, 出现“锁失效” + “缓存未命中竞争”的缓存击穿情况,双重检查缓存解决问题
  • 前端基础之《Vue(19)—状态管理》
  • html 滚动条滚动过快会留下边框线
  • pe文件结构(TLS)
  • ABP VNext 与 Neo4j:构建基于图数据库的高效关系查询
  • 第四讲:类和对象(下)
  • 一个WebRTC 分辨率动态爬升问题记录与解决过程
  • 第二十八章 RTC——实时时钟
  • 【Mini-F5265-OB开发板试用测评】显示RTC日历时钟
  • EasyRTC嵌入式音视频通信SDK助力物联网/视频物联网音视频打造全场景应用
  • 简约商务年终工作总结报告PPT模版分享
  • ingress-nginx 开启 Prometheus 监控 + Grafana 查看指标
  • 基于Selenium+Python的web自动化测试框架
  • 【Auto.js例程】华为备忘录导出到其他手机
  • leetcode sql50题
  • grafana-mcp-analyzer:基于 MCP 的轻量 AI 分析监控图表的运维神器!
  • 银医网站建设方案/北京seo网站推广
  • 网站标题被别人改了 应该怎么办/百度搜索引擎优化的推广计划
  • 免费做代理的网站/齐三seo顾问
  • 厦门网站建设680/常用的关键词挖掘工具有哪些
  • 网站建设运行情况/seo零基础入门教程
  • 怎么做企业网站仿站/东莞seo优化排名