探索OpenCV中的addWeighted函数

在计算机视觉和图像处理的领域中,我们常常需要对两个图像进行融合,以达到某种合成效果。OpenCV中提供了addWeighted函数,可以实现两个图像的叠加融合。本文将详细介绍这个函数并提供相应的代码示例。

一、addWeighted介绍

addWeighted函数是OpenCV中用于合成两张图像的函数,其函数原型如下:

void cv::addWeighted(
    InputArray src1,       //第一幅输入图像
    double alpha,          //第一幅图像的权重
    InputArray src2,       //第二幅输入图像
    double beta,           //第二幅图像的权重
    double gamma,          //亮度调整因子
    OutputArray dst,       //输出图像
    int dtype = -1         //输出图像的数据类型
);

其中,src1和src2为输入的两张图像,alpha和beta为权重参数,gamma是亮度调整系数,用于调整融合后图像的整体亮度;dst为输出图像,dtype为输出图像的数据类型。

addWeighted函数的作用是计算出输出图像dst,其中输出图像的像素值由下式计算得出:

其中,src1和src2分别乘以alpha和beta表示了两幅图像各自的权重,gamma则用于调节融合后图像的亮度。

二、使用示例

接下来我们将通过几个实例来演示如何使用addWeighted函数实现图像融合。

1. 简单的图像融合

下面的示例实现了对两幅图像进行简单的加权融合,其中两幅图像分别由原图像和水平翻转后的图像构成,权重分别是0.5和0.5。

Mat src1 = imread("image1.jpg");
Mat src2, flip_src2;
flip(src2, flip_src2, 1);    //水平翻转图像2
Mat dst;
addWeighted(src1, 0.5, flip_src2, 0.5, 0, dst);    //图像融合
imshow("dst", dst);
waitKey(0);

上述代码中,首先读入图像1,并通过flip函数水平翻转图像2,然后将两幅图像进行融合,得到输出图像dst。

2. 对图像添加遮罩

在实际应用中,我们可能需要在一幅图像上添加一些遮罩,以达到特定的效果。下面的示例演示了如何在一张图像上添加一个不透明的矩形遮罩,以达到将图像中心区域变亮的效果。

Mat src = imread("image.jpg");
Mat mask(src.size(), CV_8UC1, Scalar(0));
Rect roi(src.cols/4, src.rows/4, src.cols/2, src.rows/2);
mask(roi) = Scalar(255);
Mat dst;
addWeighted(src, 1.0, src, 0.4, 0, dst, -1, mask);
imshow("dst", dst);
waitKey(0);

上述代码中,我们首先读入图像,并定义一个与其尺寸相同的遮罩mask,将遮罩初始值设为0。然后我们定义了一个矩形roi,用于限制要处理的图像区域。接着,我们将矩形区域在遮罩中对应的像素值设为255,表示该区域是不透明的。最后,我们将图像src与图像src的0.4倍进行加权融合,并输出输出图像dst,mask参数用于指定融合的像素点。

3. 融合彩色图像

下面的例子演示了如何融合彩色图像,其中两幅图像分别由原图像和将原图像转换为灰度图像后再转换为彩色图像得到的图像构成,权重分别是0.5和0.5。

Mat src = imread("image.jpg");
cvtColor(src, src, COLOR_BGR2GRAY);    //转灰度图像
cvtColor(src, src, COLOR_GRAY2BGR);    //转彩色图像
Mat src_gray;
cvtColor(src, src_gray, COLOR_BGR2GRAY);   //转灰度图像
Mat dst;
addWeighted(src, 0.5, src_gray, 0.5, 0, dst);
imshow("dst", dst);
waitKey(0);

上述代码中,我们首先将图像转换为灰度图像,然后通过转换回彩色图像得到一张与原图像尺寸相同的彩色图像。接着,我们又将彩色图像转换为灰度图像,得到一张与原图像尺寸相同的灰度图像,用于和原图像进行融合。最后,我们将原图像和灰度图像进行融合,得到融合后的输出图像dst。

三、总结

addWeighted是一个非常实用的函数,在计算机视觉和图像处理领域有着广泛的应用。本文介绍了addWeighted的函数原型和使用方法,并给出了几个代码示例,希望能够帮助读者更加深入地了解和掌握OpenCV中这个重要的图像处理函数。

原创文章,作者:CLNP,如若转载,请注明出处:https://www.506064.com/n/131571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CLNPCLNP
上一篇 2024-10-03 23:46
下一篇 2024-10-03 23:46

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python中capitalize函数的使用

    在Python的字符串操作中,capitalize函数常常被用到,这个函数可以使字符串中的第一个单词首字母大写,其余字母小写。在本文中,我们将从以下几个方面对capitalize函…

    编程 2025-04-29
  • 如何在PyCharm中安装OpenCV?

    本文将从以下几个方面详细介绍如何在PyCharm中安装OpenCV。 一、安装Python 在安装OpenCV之前,请确保已经安装了Python。 如果您还没有安装Python,可…

    编程 2025-04-29
  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • 单片机打印函数

    单片机打印是指通过串口或并口将一些数据打印到终端设备上。在单片机应用中,打印非常重要。正确的打印数据可以让我们知道单片机运行的状态,方便我们进行调试;错误的打印数据可以帮助我们快速…

    编程 2025-04-29
  • 三角函数用英语怎么说

    三角函数,即三角比函数,是指在一个锐角三角形中某一角的对边、邻边之比。在数学中,三角函数包括正弦、余弦、正切等,它们在数学、物理、工程和计算机等领域都得到了广泛的应用。 一、正弦函…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python OpenCV 直线检测

    本文将介绍在Python OpenCV中进行直线检测的方法,主要涉及到图像的边缘检测、霍夫变换和绘制直线等操作。 一、边缘检测 由于直线检测是从图像的边缘开始的,因此必须先找到图像…

    编程 2025-04-29
  • Python实现计算阶乘的函数

    本文将介绍如何使用Python定义函数fact(n),计算n的阶乘。 一、什么是阶乘 阶乘指从1乘到指定数之间所有整数的乘积。如:5! = 5 * 4 * 3 * 2 * 1 = …

    编程 2025-04-29
  • Python定义函数判断奇偶数

    本文将从多个方面详细阐述Python定义函数判断奇偶数的方法,并提供完整的代码示例。 一、初步了解Python函数 在介绍Python如何定义函数判断奇偶数之前,我们先来了解一下P…

    编程 2025-04-29

发表回复

登录后才能评论