问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

OpenCV图像融合神器:cv::addWeighted()

创作时间:
作者:
@小白创作中心

OpenCV图像融合神器:cv::addWeighted()

引用
github
5
来源
1.
https://github.com/opencv/opencv/issues/25918
2.
https://github.com/C0untFloyd/roop-unleashed/issues/801
3.
https://github.com/Zulko/moviepy/issues/2105
4.
https://idiotdeveloper.com/image-masking-with-opencv-addweighted/
5.
https://www.cnblogs.com/apachecn/p/18467280

在图像处理和计算机视觉领域,OpenCV提供了丰富的函数库来实现各种图像操作。其中,cv::addWeighted()函数是一个强大的图像融合工具,广泛应用于图像叠加、透明度调整等场景。本文将详细介绍这个函数的使用方法,并通过具体实例展示其在图像处理中的应用。

01

函数解析

cv::addWeighted()函数的主要作用是将两个图像按照指定的权重进行加权融合。其基本语法如下:

cv::addWeighted(src1, alpha, src2, beta, gamma, dst);
  • src1:第一个输入图像
  • alphasrc1的权重系数
  • src2:第二个输入图像
  • betasrc2的权重系数
  • gamma:加到结果上的标量
  • dst:输出图像

使用这个函数时需要注意以下几点:

  1. 两个输入图像的尺寸必须相同
  2. 权重系数alphabeta决定了每个图像在最终结果中的贡献程度
  3. 参数类型需要匹配,避免出现类型转换错误
02

实践应用

为了更好地理解cv::addWeighted()函数的使用,我们通过一个具体的图像融合案例来演示其应用过程。

假设我们有两个图像:一张是风景照片,另一张是带有透明度信息的logo图像。我们的目标是将logo叠加到风景照片上,形成最终的合成图像。

步骤1:读取图像

首先,我们需要读取两张输入图像。这里假设风景照片存储在landscape.jpg文件中,logo图像存储在logo.png文件中。

cv::Mat landscape = cv::imread("landscape.jpg");
cv::Mat logo = cv::imread("logo.png", cv::IMREAD_UNCHANGED);

步骤2:调整图像尺寸

为了确保两张图像可以融合,我们需要将logo图像的尺寸调整为与风景照片相同。

cv::resize(logo, logo, landscape.size());

步骤3:分离logo的alpha通道

由于logo图像包含透明度信息,我们需要将其alpha通道分离出来,以便在融合时考虑透明度效果。

std::vector<cv::Mat> logo_channels;
cv::split(logo, logo_channels);
cv::Mat alpha_channel = logo_channels[3];

步骤4:计算权重

根据alpha通道的值,计算两个图像的权重。这里我们使用alpha通道的值作为logo图像的权重,使用其反值作为风景照片的权重。

cv::Mat inv_alpha;
cv::subtract(cv::Scalar::all(1.0), alpha_channel, inv_alpha);

步骤5:加权融合

最后,我们使用cv::addWeighted()函数将两张图像按照计算出的权重进行融合。

cv::Mat result;
cv::addWeighted(landscape, inv_alpha, logo, alpha_channel, 0.0, result);

步骤6:显示结果

将最终的合成图像显示出来,观察融合效果。

cv::imshow("Blended Image", result);
cv::waitKey(0);

通过调整alphabeta的值,我们可以控制两个图像在最终结果中的相对重要性,从而实现不同的融合效果。

03

总结

cv::addWeighted()函数是OpenCV中实现图像融合的核心工具,通过调整权重参数,可以创造出丰富的图像合成效果。无论是用于艺术创作还是图像处理任务,这个功能都能带来令人惊艳的效果。希望本文能帮助你更好地理解和掌握这个强大的图像处理工具。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号