尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

RV1126 NO.37:OPENCV的图像叠加功能 - 详解

RV1126 NO.37:OPENCV的图像叠加功能 - 详解
📅 发布时间:2026/6/21 21:24:03

RV1126 NO.37:OPENCV的图像叠加功能 - 详解

2025-12-03 17:38  tlnshuju  阅读(0)  评论(0)    收藏  举报

一.图像叠加功能简介:

图像叠加顾名思义就是在原图像里面,添加一些其他图像数据,最常见的就是在原图像中添加一些水印图像。这些水印图像可以是:时间戳、LOGO图像等等。

如上图,原图像是山的背景,在这个图像的左上角叠加绿色的LOGO标志,然后两个图像就可以融合在一起。上面这个例子,就是最经典的图像叠加案例。

二.OPENCV中图像叠加常用的API:

在OpenCV中,图像叠加有多种实现方式。下面介绍几个最常用的API接口。

2.1. 使用copyTo方法实现图像叠加

copyTo是最常用的图像叠加方法之一。其核心步骤是:

  1. 先确定ROI(兴趣区域)
  2. 然后调用copyTo方法将ROI添加到目标图像 需要注意的是,logo图像尺寸通常应小于原图。

API定义如下:

void copyTo(OutputArray m) const

参数说明:

  • OutputArray m:目标图像的二进制数据

具体实现代码(详见手写示例部分):

Mat src_img_pic= imread("frame1.jpg");
Mat logo_img_pic = imread("jaychou.png");
Mat logo_mat_roi = src_img_pic(Rect(0, 0 ,logo_img_pic.cols, logo_img_pic.rows));
logo_img_pic.copyTo(logo_mat_roi);
imwrite("copyImage_output.jpg", src_img_mat);

经过上述处理过后,整个图像的输出如下图

2.2. addWeighted方法实现图像叠加

addWeighted是另一种常用的图像叠加方法,其核心原理是通过对两幅图像执行加权求和运算来实现融合效果。与简单的copyTo方法相比,addWeighted的优势在于能够灵活调整图像的透明度及渐变效果。该方法的API定义如下:

CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1);

参数说明:

  • src1:第一个输入图像
  • alpha:第一个图像的权重系数(双精度浮点数)
  • src2:第二个输入图像
  • beta:第二个图像的权重系数(双精度浮点数)
  • gamma:加权求和的偏移量(默认值为0的双精度浮点数)
  • dst:输出图像,存储加权融合结果
  • dtype:输出图像类型(默认-1表示与输入图像类型相同)

其数学表达式为: dst = src1 × alpha + src2 × beta + gamma

实际应用时需要注意两种不同情况:

  1. 当两幅待融合图像尺寸相同时
  2. 当两幅图像尺寸不一致时
#include 
#include 
#include 
#include 
#include 
using namespace cv;
using namespace std;
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(20 , 20, src2.cols, src2.rows)); //在原图像中截取一个可感兴趣区域,感兴趣区域double alpha = 0.4; //alpha第一个图像的权重值,这里是0.4double beta = 1 - alpha;//beta是第二个图像权重值,1- alpha = 0.6,第二个图像的清晰度较高int gamma = 0; //gamma默认为0addWeighted(image_roi, alpha , src2, beta, gamma, 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);}return 0;
}

上面的代码分了两种情况处理,当两个融合图像不相同的情况下,则需要调整原图像的大小,一般使用ROI区域调整(Mat imageROI = src1(Rect(20, 20, src2.cols, src2.rows));),再去调用addWeighted去融合两张图片,值得注意的是alpha第一个图像的权重是0.4, LOGO图像的权重是1-alpha = 0.6,这说明LOGO图像的权重更高,更清晰。若两个融合图像大小相同,则直接调用addWeighted即可。

下面我们看一下实际效果:

---------------------------------------------------------------------------------------------------------------------------------

第一种情况,融合图片尺寸不一样,如下图:

第二种情况,融合图片尺寸一样,如下图:

frame1.jpg

frame1_process.jpg

最终合成的效果是:

可以看到,我们最终融合的图片,alpha是原图像的加权值0.4,beta = 1 - alpha = 0.6是frame1_process.jpg的加权值。可以看到frame1_process.jpg的图像比frame1.jpg更明显

相关新闻

  • json压缩与解压
  • 2025最新招投标系统实战推荐TOP5:从全流程数智化到垂直场景适配,企业选型指南
  • 2025年12月出入口安防系统,安防监控系统,弱电安防系统厂家推荐:聚焦安防核心需求,资质认证与案例落地双保障!

最新新闻

  • MPC5XX异常表重定位与多处理器地址映射实战解析
  • Seraphine终极指南:如何用Python快速打造英雄联盟数据查询与游戏辅助工具
  • 终极指南:如何用PKSM一站式管理你的宝可梦全世代存档
  • 20251910 2025-2026-2 《网络攻防实践》课程总结
  • 嵌入式心电监护系统开发:从硬件选型到USB通信协议实战
  • 频域融合:RGB与事件相机协同的目标跟踪新框架

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号