当前位置: 首页 > 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.lqws.cn/news/178219.html

相关文章:

  • Keil调试模式下,排查程序崩溃简述
  • C#实现Stdio通信方式的MCP Server
  • 数据通信 PoE 交换机解决方案
  • 高效Excel合并拆分软件
  • 【人工智能】一些基本概念
  • 惠普HP Deskjet 9600 打印机信息
  • 【递归、搜索与回溯】综合练习(四)
  • JVM虚拟机:内存结构、垃圾回收、性能优化
  • 使用 Mechanical 脚本获取联合反作用力和力矩
  • Linux 服务管理与自启动配置全解析:rc.d、systemctl与service对比
  • 物联网嵌入式开发实训室建设方案探讨(高职物联网应用技术专业实训室建设)
  • 【使用conda】安装pytorch
  • 力扣刷题(第四十九天)
  • 【redis实战篇】第八天
  • 越狱蒸馏-可再生安全基准测试
  • Science Robotics:UCLA 贺曦敏团队综述自主软体机器人
  • 绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
  • AI大模型学习三十三、HeyGem.ai 服务端(ubuntu)docker 安装 /客户端(win)分离部署
  • 【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
  • 智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
  • vscode使用系列之快速生成html模板
  • LlamaFactory × 多模态RAG × Chat-BI:万字长文探寻RAG进化轨迹,打造卓越专业AI助手
  • 安卓基础(ProGuard vs R8)
  • FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码
  • 【Linux】Linux 进程间通讯-管道
  • gitlab CI/CD本地部署配置
  • WebRTC 与 WebSocket 的关联关系
  • 【JVM】Java虚拟机(一)——内存结构
  • Qt生成日志与以及报错文件(mingw64位,winDbg)————附带详细解说
  • 在Windows下利用LoongArch-toolchain交叉编译Qt