【Qt+opencv】ROI与图像混合

文章目录

  • 前言
  • ROI
    • ROI是什么
    • 如何提取ROI
  • 图像混合
    • 整体混合
      • 线性混合
    • 局部混合
  • 总结


前言

在计算机视觉和图像处理中,我们经常需要对图像的某一部分(也就是ROI,Region of Interest)进行操作。这些操作可能包括滤波、缩放、旋转等。同时,我们也可能需要将处理后的ROI与原图像进行混合,以达到特定的视觉效果。本文将介绍如何在Qt和OpenCV的环境下进行ROI的提取和操作,以及如何将ROI与原图像进行混合。


ROI

ROI是什么

ROI是"Region of Interest"的缩写,中文可以翻译为"感兴趣区域"。在图像处理和计算机视觉中,ROI通常指的是我们需要关注或处理的图像的一部分。

比如说,如果你正在使用面部识别技术,那么人脸部分就是你的ROI,因为你的主要任务是在这个区域内识别人脸。同样,如果你正在进行道路识别,那么道路部分就是你的ROI。

通过定义ROI,我们可以将注意力集中在图像中最重要的部分,从而提高处理效率并减少不必要的干扰。

如何提取ROI

方法一:使用构造函数

//创建宽度为 320,高度为 240 的 3 通道图像
Mat img(Size(320, 240), CV_8UC3);
//roi 是表示 img 中 Rect(10, 10, 100, 100)区域的对象
Mat roi(img, Rect(10, 10, 100, 100));

方法二:使用括号运算符

Mat roi2 = img(Rect(10, 10, 100, 100));
// 用括号运算符
Mat roi3 = img(Range(10, 100), Range(10, 100)); 
// 用构造函数
Mat roi4(img, Range(10, 100), Range(10, 100));

图像混合

整体混合

线性混合

在OpenCV中,线性混合(Linear Blending)是一种常见的图像处理操作,它的公式如下:

g ( x ) = ( 1 − α ) f 0 ( x ) + α f 1 ( x ) g(x) = (1 - α)f_{0}(x) + αf_{1}(x) g(x)=(1α)f0(x)+αf1(x)

其中:

  • g(x) 是输出图像
  • f_{0}(x)f_{1}(x) 是输入的两幅图像
  • α 是一个在0到1之间的参数

这个公式的含义是,对于每一个像素位置x,输出图像g(x)的像素值是输入图像f_{0}(x)f_{1}(x)在该位置的像素值的加权平均。权重由参数α决定。

α从0变化到1时,这个操作可以用来在两幅图像或者两段视频之间进行时间上的交叉溶解(cross-dissolve),就像在幻灯片放映和电影制作中看到的那样。

在OpenCV中,你可以使用addWeighted()函数来实现线性混合。这个函数的原型如下:

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

其中:

  • src1src2 是输入的两幅图像
  • alphabeta 是对应的权重
  • gamma 是一个可选的标量,添加到加权和中
  • dst 是输出的图像
  • dtype 是输出图像的深度,-1表示与src1相同

所以,addWeighted()函数实现的操作是:

d s t = α ⋅ s r c 1 + β ⋅ s r c 2 + γ dst = α ⋅ src1 + β ⋅ src2 + γ dst=αsrc1+βsrc2+γ

这里,γ对应于上面代码中被设为0.0的参数。这样,我们就可以通过调整αβ的值来控制两幅图像的混合程度。注意,αβ的和通常为1,以保持图像的亮度不变。如果γ不为0,那么它会被添加到混合后的图像中,可以用来调整图像的亮度。这就是OpenCV线性混合的公式以及其中参数的作用。

局部混合

局部混合其实就是把ROI提取出来,使用addWeighted函数即可


总结

通过本文,我们了解了如何在Qt和OpenCV的环境下进行ROI的提取和操作,以及如何将ROI与原图像进行混合。我们首先介绍了如何定义和提取ROI,然后介绍了如何对ROI进行各种操作,最后我们介绍了如何将处理后的ROI与原图像进行混合。希望本文能帮助读者更好地理解和掌握在Qt和OpenCV环境下进行ROI操作和图像混合的方法。在未来的学习和工作中,读者可以根据自己的需求,灵活地运用这些方法,以实现更复杂和高级的图像处理任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/46744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 跨域请求处理全攻略:从原理到实践

文章目录 SpringBoot 如何处理跨域请求?你能说出几种方法?跨域请求概述跨域解决方案1. 使用CrossOrigin注解2. 使用WebMvcConfigurer配置类3. 使用过滤器(Filter)4. 使用Spring Security处理CORS5.使用Spring Cloud Gateway处理CO…

灵雀云AML:赋能金融AI,构建数智时代核心竞争力

在人工智能(AI)技术的迅猛发展中,金融行业正迈入变革的新时代。AI不仅在优化投资决策、信用评估、实时监控和欺诈识别方面展现出强大功能,还极大地提升了客户体验、降低了运营成本,并推动了产品创新。面对智能时代的挑…

C#知识|账号管理系统:多条件动态查询条件的编写。

哈喽,你好啊,我是雷工! 在项目开发中涉及到许多通过多个条件勾选来实现动态的多个条件查询的情况, 此节记录多条件查询的后台代码编写,以下为学习笔记。 01 实现原理 通过界面输入框输入或者下拉框下拉选择任意查询…

《RuoYi基于SpringBoot+Vue前后端分离的Java快速开发框架学习》系列博客_Part2_添加菜单

系列文章目录 Part1:启动RouYi 文章目录 系列文章目录Part1:启动RouYi 实现添加菜单功能来显示新的音图分析页面(所截图片都是在已经添加菜单完成后的情况下)一、建立一个菜单二、建立数据库1、通过数据库软件建立一个表,供我们使用&#xf…

强化学习算法DQN实现

DQN的基本思想 Q学习:Q学习是一种基于值函数的强化学习方法,目的是通过学习状态-动作值函数Q(s, a)来指导智能体的动作选择。Q函数表示在状态s采取动作a后能够获得的期望总回报。 深度神经网络:使用深度神经网络来近似Q函数。输入是状态s&am…

【Ngix】快速上手,由浅入深

内容概述 1、nginx 简介 (1)介绍 nginx 的应用场景和具体可以做什么事情 (2)介绍什么是反向代理 (3)介绍什么是负载均衡 (4)介绍什么是动静分离 2、nginx 安装 (1…

Leetcode - 周赛406

目录 一,3216. 交换后字典序最小的字符串 二,3217. 从链表中移除在数组中存在的节点 三,3218. 切蛋糕的最小总开销 I 四,3219. 切蛋糕的最小总开销 II 一,3216. 交换后字典序最小的字符串 本题要求交换一次相邻字符…

C++编程逻辑讲解step by step:静态数组长度后确定还能编译成功

定义 定义一维数组的一般格式为 类型标识符 数组名[常量表达式]; 例如: int a[10]; 问题 很多人写成这样: int n; cin>>n; int a[n]; 这个写法已经明确,是错的&…

新建vue项目和安装第三方库

安装vue 打开vscode编辑器,按Ctrl组合键打开终端,在命令行中运行以下命令 npm create vuelatest项目初始化完成,可执行以下命令: cd vue-project --切换到项目目录 npm install -- 安装依赖包 npm run dev -- 运行项目安装 …

大数据架构对比记录

Lambda架构 -维护两套项目,开发和维护成本高 -两套链路,数据容易不一致 -数据计算成本大(例如原定每小时计算一次,但有额外新需求需要计算两点半-三点半之间数据,则需要重新计算) Kappa -过于依赖kafka消…

FPGA:基于复旦微FMQL10S400 /FMQL20S400 国产化核心板

复旦微电子是国内集成电路设计行业的领军企业之一,早在2000年就在香港创业板上市,成为行业内首家上市公司。公司的RFID芯片、智能卡芯片、EEPROM、智能电表MCU等多种产品在市场上的占有率位居行业前列。 今天介绍的是搭载复旦微 FMQL10S400/FMQL20S400的…

嵌入式Linux应用开发基础-现有动态库so的使用

前言 最近做嵌入式Linux项目,需要调用客户提供的现成的动态库(so文件,包含对应头文件),我这边用的是cmake来构建。 此篇文章主要是记录一下嵌入式Linux的动态库的使用,与君共勉! 一、通过cmake使用so库和对应的头文件…

01数据结构 - 顺序表

这里是只讲干货不讲废话的炽念,这个系列的文章是为了我自己以后复习数据结构而写,所以可能会用一种我自己能够听懂的方式来描述,不会像书本上那么枯燥和无聊,且全系列的代码均是可运行的代码,关键地方会给出注释^_^ 全…

C++客户端Qt开发——常用控件(容器类控件)

6.容器类控件 ①GroupBox 带标题分组框 属性 说明 title 分组框的标题 alignment 分组框内部内容的对齐方式 flat 是否是"扁平"模式 checkable 是否可选择 设为true,则在title前方会多出一个可勾选的部分. check 描述分组框的选择状态(前提…

数据结构(5.1)——树的性质

结点数总度数1 结点的度——结点有几个孩子(分支) 度为m的树、m叉树的区别 度为m的树第i层至多有 个结点(i>1) 高度为h的m叉树至多有 个结点 高度为h的m叉树至少有h个结点 、高度为h,度为m叉树至多有hm-1个结点 具有n个结点的m叉树的最小高度为 总结

通过角点进行水果的果梗检测一种新方法

一、前言 在前面的《数字图像处理与机器视觉》案例一(库尔勒香梨果梗提取和测量)中主要使用数学形态学的方法进行果梗提取,下面给出一种提取果梗的新思路。 众所周知,一般果梗和果实在边缘处角度有较大突变,可以通过合…

探索WebKit的CSS列表与标记:美化列表的艺术

探索WebKit的CSS列表与标记:美化列表的艺术 CSS列表和标记是网页设计中用于增强列表展示效果的重要工具。WebKit,作为多种现代浏览器的内核,包括Safari、QQ浏览器等,提供了对CSS列表和标记的广泛支持。本文将深入探讨WebKit对CSS…

spring security源码追踪理解(一)

一、前言 近期看了spring security相关的介绍,再加上项目所用若依框架的底层安全模块也是spring security,所以想从源码的角度加深下对该安全模块的理解(看源码之前,我们要先有个意识,那就是spring security安全模块主…

Solus Linux简介

以下是学习笔记,具体详实的内容请参考官网:Home | Solus Solus Linux 是一个独立的 Linux 发行版,它以其现代的设计、优化的性能和友好的用户体验而著称。以下是一些关于 Solus Linux 的最新动向和特点: 1. **最新版本发布**&a…

第122天:内网安全-域信息收集应用网络凭据CS 插件AdfindBloodHound

目录 前置知识 背景和思路 判断是否在域内 案例一:架构信息类收集-网络&用户&域控等 案例二:自动化工具探针-插件&Adfind&BloodHound Adfind(域信息收集工具) ​BloodHound(自动化域渗透工具) 前置知识 本…