玩转OpenCV图像叠加:cv::addWeighted函数详解与实战
创作时间:
作者:
@小白创作中心
玩转OpenCV图像叠加:cv::addWeighted函数详解与实战
引用
CSDN
等
8
来源
1.
https://m.blog.csdn.net/weixin_42238129/article/details/144564391
2.
https://m.blog.csdn.net/weixin_43869605/article/details/119918814
3.
https://blog.csdn.net/qq_35037684/article/details/120281223
4.
https://blog.csdn.net/CHNIM/article/details/136621759
5.
https://m.blog.csdn.net/qq_29448131/article/details/140554402
6.
https://blog.csdn.net/qq_26043945/article/details/137039477
7.
https://www.cnblogs.com/qq21497936/p/18502043
8.
https://docs.opencv.ac.cn/4.10.0/d0/d86/tutorial_py_image_arithmetics.html
在图像处理领域,图像叠加是一种常见的操作,它可以将多张图像融合成一张,实现各种视觉效果。OpenCV作为最流行的计算机视觉库之一,提供了强大的图像处理功能,其中cv::addWeighted
函数就是实现图像叠加的关键工具。本文将详细介绍这个函数的使用方法和应用场景。
函数定义与参数解释
cv::addWeighted
函数的基本定义如下:
cv::addWeighted(src1, alpha, src2, beta, gamma, dst)
src1
:第一张输入图像,通常是较为重要或需要重点显示的图像。alpha
:第一张图像的权重系数,用于控制src1
对最终结果的贡献。范围一般在[0, 1]之间。src2
:第二张输入图像,通常是背景或需要进行融合的图像。beta
:第二张图像的权重系数,用于控制src2
对最终结果的贡献。范围一般在[0, 1]之间。gamma
:常数加权值,默认值是0。它是对加权后的结果进行的一个常数偏移,用于调整亮度。可以为正、负或零,通常用于调整最终输出图像的亮度。dst
:输出图像,类型与输入图像相同。
使用场景
cv::addWeighted
函数广泛应用于以下场景:
- 图像融合:将两张图像按一定比例叠加,生成更具艺术效果或合成效果的图像。例如,将一个图像的前景叠加在另一个图像的背景上。
- 透明度控制:通过调整权重参数,可以实现图像的半透明效果。
- 图像特效:通过调整
gamma
、alpha
和beta
,可以对图像进行亮度调整或应用类似遮罩、光影等效果。
代码示例
Python版本
import cv2
import numpy as np
# 读取两张图像
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
# 确保两张图像尺寸一致
img1 = cv2.resize(img1, (640, 480))
img2 = cv2.resize(img2, (640, 480))
# 设置权重参数
alpha = 0.7
beta = 0.3
gamma = 0
# 使用cv2.addWeighted进行图像叠加
result = cv2.addWeighted(img1, alpha, img2, beta, gamma)
# 显示结果
cv2.imshow('Blended Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
C++版本
#include <opencv2/opencv.hpp>
int main() {
// 读取两张图像
cv::Mat img1 = cv::imread("image1.jpg");
cv::Mat img2 = cv::imread("image2.jpg");
// 确保两张图像具有相同的尺寸
cv::Mat img1_resized, img2_resized;
if (img1.size() != img2.size()) {
cv::resize(img1, img1_resized, img2.size(), 0, 0, cv::INTER_LINEAR);
img2_resized = img2.clone();
} else {
img1_resized = img1.clone();
img2_resized = img2.clone();
}
// 定义权重
double alpha = 0.7; // 第一张图像的权重
double beta = 0.3; // 第二张图像的权重
double gamma = 0; // 常数值(可选,通常设为0)
// 使用addWeighted()进行图像融合
cv::Mat blended_img;
cv::addWeighted(img1_resized, alpha, img2_resized, beta, gamma, blended_img);
// 显示融合后的图像
cv::imshow("Blended Image", blended_img);
cv::waitKey(0);
return 0;
}
应用效果展示
上图展示了两张图像叠加的效果,其中第一张图像的权重为0.7,第二张图像的权重为0.3。可以看到,通过调整权重参数,可以实现不同比例的图像融合效果。
注意事项
- 图像尺寸:输入的两张图像必须具有相同的尺寸。如果不一致,需要先进行resize操作。
- 数据类型:输入图像的数据类型必须相同。如果类型不同,需要先进行转换。
- 权重范围:
alpha
和beta
参数的取值范围一般在[0, 1]之间,但也可以超出这个范围以实现特殊效果。 - 性能考虑:对于大规模图像处理任务,需要注意计算效率和内存使用情况。
通过掌握cv::addWeighted
函数的使用方法,你可以轻松实现各种图像叠加效果,为图像处理和计算机视觉应用增添更多可能性。
热门推荐
可降解的包装材料有哪些?
2025两头春,这4个属相要注意
红茶与胎菊的搭配指南:功效、泡法及健康益处全解析
2025本命年除了要穿红,还有这些禁忌!
2024年9月份70城市房价指数图文分析
冬季热车分两个步骤,不注意可能致使烧机油,老司机一次给你讲清
天冷了,热车时间要延长吗?科学解读汽车热车的必要性
现在的新车还需要热车吗?真相来了……
秋冬打卡云南最美摄影地:东川、罗平、元阳
云南石林自驾游必打卡:世界自然遗产里的地质奇观与人文魅力
建设工程管理专业:就业前景广阔,薪资潜力可观
间质性肺炎是什么病严重吗
麻仁丸有副作用吗
双十一快递查询全攻略:5.5亿件包裹如何快速追踪?
改变依恋模式,能不能过下去?
黄河流域重要的中心城市!国家明确济南新定位
济南学区房:腰斩只是开始!
雁门关为何有中华第一关的美誉?三关冲要无双地,九塞尊崇第一关
“肺”常关爱!呼吸康复训练帮助患者畅享呼吸
和平精英海岛地图P城打法攻略
无人机项目经理:科技前沿的“掌舵人”
无人机班毕业生:就业市场的香饽饽!
垃圾分类:环保新时尚!
方植科技助力海南垃圾分类智能化:从试点到普及
垃圾分类难推进?专家揭秘背后真相
全面分析《葫芦娃》人物战斗力第一期
慢性阻塞性肺疾病诊断要点及治疗方案总结!
2025年夫妻沟通新攻略:让爱更长久!
婚姻家庭咨询师教你夫妻沟通秘籍
《再见爱人4》揭示夫妻沟通秘籍