【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.niftyadmin.cn/n/5558009.html

相关文章

NSSCTF中24网安培训day2中web题目【下】

[NISACTF 2022]easyssrf 这道题目考察的是php伪协议的知识点 首先利用file协议进行flag查找 file:///flag.php 接着我们用file协议继续查找fl4g file:///fl4g 接着我们访问此文件,得到php代码如下 这里存在着stristr的函数&#x…

K8S组件calico重建过程

问题背景:周一来了以后看到calico-node组件pod重启100多次,查看日志发现warning日志: Number of node(s) with BGP peering established 2 calico/node is not ready: felix is not ready: Get “http://localhost:9099/readiness”: dial t…

提高自动化测试脚本编写效率 5大关键注意事项

提高自动化测试脚本编写效率能加速测试周期,减少人工错误,提升软件质量,促进项目按时交付,增强团队生产力和项目成功率。而自动化测试脚本编写效率低下,往往会导致测试周期延长,增加项目成本,延…

[k8s源码]4.informer

Informer 是 client-go 库中的一个核心组件,它提供了一种高效的方式来监视 Kubernetes 集群中资源的变化。Informer 通过 Watch 机制与 API Server 建立长连接,初次同步时会获取资源的完整列表,之后只接收增量更新,大大减少了网络流量。 使用informer可…

如何在VSCode中配置Python环境

在Visual Studio Code(VSCode)中配置Python环境,主要包括安装VSCode、安装Python解释器、安装Python插件以及配置Python解释器等步骤。以下是详细的配置指南: 一、安装VSCode 下载VSCode: 访问VSCode官网。根据自己的…

计算机视觉和自然语言处理:OCR 模型

OCR 模型 文字识别(Optical Character Recognition,OCR)模型是一种用来从图像中提取文本的技术。OCR模型在计算机视觉和自然语言处理中的应用非常广泛,例如将扫描的文档转换为可编辑的文本文件,自动读取车牌号码&…

opencv—常用函数学习_“干货“_10

目录 二七、离散余弦变换 执行离散余弦变换 (dct) 和逆变换 (idct) 解释 实际应用 JPEG压缩示例(简化版) 二八、图像几何变换 仿射变换 (warpAffine 和 getAffineTransform) 透视变换 (warpPerspective 和 getPerspectiveTransform) 旋转变换 (g…

Mongodb多键索引中索引边界的混合

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第93篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…