【Qt+opencv】ROI与图像混合

文章目录


前言

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


ROI

ROI是什么

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

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

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

如何提取ROI

方法一:使用构造函数

cpp 复制代码
//创建宽度为 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));

方法二:使用括号运算符

cpp 复制代码
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()函数来实现线性混合。这个函数的原型如下:

cpp 复制代码
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操作和图像混合的方法。在未来的学习和工作中,读者可以根据自己的需求,灵活地运用这些方法,以实现更复杂和高级的图像处理任务。

相关推荐
兵哥工控3 分钟前
MFC工控项目实例二十九主对话框调用子对话框设定参数值
c++·mfc
汤米粥5 分钟前
小皮PHP连接数据库提示could not find driver
开发语言·php
冰淇淋烤布蕾8 分钟前
EasyExcel使用
java·开发语言·excel
艾思科蓝-何老师【H8053】8 分钟前
【ACM出版】第四届信号处理与通信技术国际学术会议(SPCT 2024)
人工智能·信号处理·论文发表·香港中文大学
我爱工作&工作love我11 分钟前
1435:【例题3】曲线 一本通 代替三分
c++·算法
拾荒的小海螺14 分钟前
JAVA:探索 EasyExcel 的技术指南
java·开发语言
秀儿还能再秀28 分钟前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
weixin_4526006936 分钟前
《青牛科技 GC6125:驱动芯片中的璀璨之星,点亮 IPcamera 和云台控制(替代 BU24025/ROHM)》
人工智能·科技·单片机·嵌入式硬件·新能源充电桩·智能充电枪
学术搬运工36 分钟前
【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)
大数据·图像处理·人工智能·科技·机器学习·自然语言处理
马剑威(威哥爱编程)39 分钟前
哇喔!20种单例模式的实现与变异总结
java·开发语言·单例模式