RV1126-OPENCV 图像叠加

article/2025/8/13 15:38:29

一.功能介绍

        图像叠加:就是在一张图片上放上自己想要的图片,如LOGO,时间等。有点像之前提到的OSD原理一样。例如:下图一张图片,在左上角增加其他图片。

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

1. copyTo方法进行图像叠加

  • 原理:在图片1中选取一个 Rect 的兴趣区域(也就是自己想要放哪,放多大),然后把图2放在兴趣区域,最后输出图片1。注意:这个兴趣区域要和图2一样大小。例如:图1为原图,图2为杰伦。

  •  API: void copyTo( OutputArray m ) const
  •  代码实现:
#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{//读取图像Mat src_pic = imread("frame1.jpg"); //src_pic是原图像数据Mat logo_pic = imread("mat_demo.jpg");//logo_pic是LOGO图像的数据//创建兴趣区域Mat logo_pic_roi = src_pic(Rect(0,0,logo_pic.cols, logo_pic.rows)); //在src_pic上创建一个矩形区域,大小与logo_pic相同//将logo_pic复制到logo_pic_roi中logo_pic.copyTo(logo_pic_roi);//显示图像imwrite("result.jpg", src_pic);return 0;
}

2. addWeighted方法对图像数据进行图像叠加

  • 原理:和copyTo一样,只不过多了一个加权操作(加权:1 = 图片1的权重+图片2的权重,谁的权重高,谁更清楚,更清晰),然后输出新图片。
  • API:  addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, intdtype = -1);

第一个参数:src1,第一个输入的图像
第二个参数:alpha,第一个输入图像的权重值,是一个双精度浮点数
第三个参数:src2,第二个输入图像
第四个参数:beta,第二个输入图像的权重,是一个双精度浮点数
第五个参数:gamma 加权和的可选标量,通常是一个双精度浮点数,默认为 0
第六个参数:dst 输出图像,这里是存储加权图像的结果
第七个参数:输出图像的类型,默认是-1,表示的是输入图像和输出图像类型一致

上图是src1权重为0.8,下图是src1权重为0.3效果:

  • addWeighted的两种情况:1.两张图片大小不一样:就是先在图片1上面创建感兴趣区域,然后融合感兴趣区域和图片2,最后输出图片1;2.两张图片一样大:直接融合两张图片,然后生成新图片。
  • 代码实现: 
#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>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大小是否相同,若不同则和copyTo函数一样操作if(src1.size != src2.size){//在src1中创建一个矩形区域(兴趣区域)和src2大小相同的图像Mat image_roi = src1(Rect(0, 0, src2.cols, src2.rows));//设置权重double alpha = 0.8;double beta = 1 - alpha;int gamma = 0;//将src2和src1的矩形区域(兴趣区域)进行融合,并将结果存入image_roi中addWeighted(image_roi, alpha, src2, beta, gamma, image_roi);imwrite("addweighted3.jpg", src1);}else{//src1和src2大小相同,直接进行加权操作double alpha = 0.3;double beta = 1 - alpha;int gamma = 0;Mat dst;addWeighted(src1, alpha, src2, beta, gamma,dst);imwrite("addweighted2.jpg", dst);}return 0;
}


http://www.hkcw.cn/article/XXvQHUIyhi.shtml

相关文章

Java流【全】

IO流分类 AA、根据数据流动的方向:输入流和输出流 如:打开一个新的记事本并输入一些内容,而这些内容是在内存里面的,没有存储到磁盘中,当点击保存之后,数据才会从内存流向磁盘;当双击打开磁盘文件的时候,数据才会从磁盘流向内存【数据存储有一个特点:内存一旦断电数…

大模型登《情报学报》!大模型驱动的学术文本挖掘!

武汉大学信息管理学院、武汉大学信息检索与知识挖掘研究所的陆伟、刘寅鹏、石湘、刘家伟、程齐凯、黄永和汪磊共同研究的《大模型驱动的学术文本挖掘——推理端指令策略构建及能力评测》在《情报学报》中发表。论文以学术文本挖掘任务为切入点&#xff0c;构建涵盖文本分类、信…

UI 设计|提高审美|极简扁平过时吗?

​在做UI界面时&#xff0c;极简扁平一直是个稳妥又高适配的选择。它没有复杂的质感和装饰&#xff0c;更强调清晰、直接和功能导向&#xff0c;能快速搭建出干净、有秩序的界面&#xff0c;适合大多数场景落地。 但是也确实有太多太相似的极简导致确实辨识度&#xff0c;这中…

哈尔滨工业大学提出ADSUNet—红外暗弱小目标邻帧检测新框架

ADSUNet: Accumulation-Difference-Based Siamese U-Net for inter-frame Infrared Dim and Small Target Detection 作者单位&#xff1a;哈尔滨工业大学空间光学工程研究中心 引用: Liuwei Zhang, Yuyang Xi, Zhipeng Wang, Wang Zhang, Fanjiao Tan, Qingyu Hou, ADSUNet: A…

#14 【Kaggle】 Drawing with LLMs 金牌方案赏析

用大模型画svg的比赛结束了,本来还是银牌的,shake down成了铜牌… 痛定思痛,瞻仰一下第一名的金牌解决方案。 🍕 比赛简单介绍 给定一段描述图像的文本提示,你的任务是生成可缩放矢量图形(SVG)代码,将其尽可能准确地渲染为一幅图像。 本次竞赛旨在构建既实用又可复用…

多任务——进程

1.进程的介绍 1. 进程的基本概念 在 Python 中&#xff0c;进程是操作系统分配资源和调度的基本单位&#xff0c;代表一个独立的程序执行实例。Python 的 multiprocessing 模块支持多进程编程&#xff0c;允许在单个程序中并行运行多个进程。每个进程拥有&#xff1a; 独立的…

Baklib加速企业AI数据治理实践

企业知识中台构建路径 在数字化转型进程中&#xff0c;企业需通过知识中台实现知识资产的系统性整合与价值释放。Baklib作为典型解决方案&#xff0c;以智能化技术为支撑&#xff0c;通过标准化数据接口打通CRM、ERP等异构系统&#xff0c;构建全域知识图谱。其核心实施路径包…

设计模式——状态设计模式(行为型)

摘要 状态设计模式是一种行为型设计模式&#xff0c;核心在于允许对象在内部状态改变时改变行为。它通过状态对象封装不同行为&#xff0c;使状态切换灵活清晰。该模式包含环境类、抽象状态类和具体状态类等角色&#xff0c;具有避免大量分支判断、符合单一职责和开闭原则等特…

搜索引擎2.0(based elasticsearch6.8)设计与实现细节(完整版)

1 简介 1.1 背景 《搜索引擎onesearch 1.0-设计与实现.docx》介绍了1.0特性&#xff0c;搜索schema&#xff0c;agg&#xff0c;表达式搜索映射&#xff0c;本文介绍onesearch 2.0 新特性, 参考第2节 规划特性与发布计划 1.2 关键词 文档 Document elasticsearch 一行数据称为…

【项目记录】登录认证(上)

前面已经实现了部门管理、员工管理的基本功能&#xff0c;但并没有登录&#xff0c;就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的&#xff0c;所以这次的主题就是登录认证。最终要实现的效果是&#xff1a; 如果用户名密码错误&#xff0c;不允许登录系统。 如…

Redis:安装与常用命令

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Redis &#x1f525; 安装 Redis 使⽤apt安装 apt install redis -y⽀持远程连接 修改 /etc/redis/redis.conf 修改 bind 127.0.0.1 为 bind 0.0.0.0 修改 protected-mode yes 为 protected-mo…

16-前端Web实战(Tlias案例-部门管理)

在前面的课程中&#xff0c;我们学习了Vue工程化的基础内容、TS、ElementPlus&#xff0c;那接下来呢&#xff0c;我们要通过一个案例&#xff0c;加强大家对于Vue项目的理解&#xff0c;并掌握Vue项目的开发。 这个案例呢&#xff0c;就是我们之前所做的Tlias智能学习辅助系统…

MagicAnimate 论文解读:引入时间一致性的视频人物动画生成方法

1. 前言/动机 问题&#xff1a;现有动画生成方法缺乏对时间信息的建模&#xff0c;常常出现时间一致性差的问题 描述&#xff1a; 现有的动画生成方法通常采用帧变形&#xff08;frame-warping&#xff09;技术&#xff0c;将参考图像变形以匹配目标动作。尽管这类方法能生成较…

C语言基础(09)【数组的概念 与一维数组】

数组 数组的概念 什么是数组 数组是相同类型、有序数据的集合。 数组的特征 数组中的数据称之为数组的元素(数组中的每一个匿名变量空间&#xff0c;是同构的)数组中的元素存放在内存空间建立。 衍生概念&#xff1a;下标&#xff08;索引&#xff09; 下标或者索引代表…

Spring MVC参数绑定终极手册:单多参/对象/集合/JSON/文件上传精讲

我们通过浏览器访问不同的路径&#xff0c;就是在发送不同的请求&#xff0c;在发送请求时&#xff0c;可能会带一些参数&#xff0c;本文将介绍了Spring MVC中处理不同请求参数的多种方式 一、传递单个参数 接收单个参数&#xff0c;在Spring MVC中直接用方法中的参数就可以&…

【Go-补充】Sync包

并发编程-Sync包 sync.WaitGroup 在代码中生硬的使用time.Sleep肯定是不合适的&#xff0c;Go语言中可以使用sync.WaitGroup来实现并发任务的同步。 sync.WaitGroup有以下几个方法&#xff1a; 方法名功能(wg * WaitGroup) Add(delta int)计数器delta(wg *WaitGroup) Done()…

M-OFDM模糊函数原理及仿真

文章目录 前言一、M序列二、M-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、m-OFDM 模糊函数②、m-OFDM 距离分辨率③、m-OFDM 速度分辨率④、m-OFDM 等高线图 四、资源自取 前言 本文进行 M-OFDM 的原理讲解及仿真&#x…

《C++初阶之入门基础》【C++的前世今生】

【C的前世今生】目录 前言&#xff1a;---------------起源---------------一、历史背景二、横空出世---------------发展---------------三、标准立世C98&#xff1a;首个国际标准版本C03&#xff1a;小修订版本 四、现代进化C11&#xff1a;现代C的开端C14&#xff1a;对C11的…

长上下文推理新范式!QwenLong-L1如何通过强化学习突破大模型语境局限?

长上下文推理新范式&#xff01;QwenLong-L1如何通过强化学习突破大模型语境局限&#xff1f; 在大模型推理能力不断精进的今天&#xff0c;长上下文处理仍是亟待突破的难题。本文介绍的QwenLong-L1框架&#xff0c;借助渐进式语境扩展与强化学习&#xff0c;成功让大模型在长…

git 学习

目录 关于git 版本管理概述 git的优点 一 下载&#xff0c;安装git 二 使用git 的处理流程 三 学习基本的git命令 1 git初始化 2 查看 状态 3 提交的缓存区 4回退到工作区 关于git 版本管理概述 码云&#xff1a;Gitee - 基于 Git 的代码托管和研发协作平台 git 是用…