玩转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函数的使用方法,你可以轻松实现各种图像叠加效果,为图像处理和计算机视觉应用增添更多可能性。
热门推荐
铆钉如何选择最佳的铆接长度
基于Spring Boot的公交智能化系统详解
复变函数可微条件深入理解
什么是三元催化剂?
化学试剂 十八水合硫酸铝(硫酸铝)检测
怎样让痘痘快速消退
互动式多媒体教学课件设计
分析与解读:海关总署对泰国糖制品进口管控升级的背景与影响
培养孩子的科学素养,助TA探索未知的奇妙旅程
短视频代运营公司如何设定运营人员的绩效KPI?
发现甲状腺癌,观察还是手术?中山三院发布多学科诊治路径
如何巧妙去除新衣上的商标标签?
一立方厘米黑洞逼近,地球将面临何种终极命运?
深度横评:小天鹅、博世、LG洗烘一体机,谁更适合小户型阳台?
哈佛大学哲学专业必修课程详解
检验科、影像科医生要涨工资了?!
次净衣收纳全攻略:门厅、卧室、书房的高明收纳法
精神卫生服务短板亟待补齐
脾肾旭元方解密:成分与调理之道
盘点2024待遇最好的10 家央国企名单!
遇事紧张心慌全身发抖怎么来缓解
瑞士汽车品牌:钟表之国的汽车传奇
会计报表的横向比较分析、纵向比较分析及趋势分析-会计实务之财务报表
严禁利用融券变相T+0交易 券商再行动 市场融券已极度缩量
根据胎芽大小推算孕周准确吗?
12315和黑猫投诉哪个更好用:投诉平台大对比
Windows 11系统局域网共享文件数据设置指南
人参合剂人参口服液的功效与作用
逛菜场发现药材新物种,为合理用药提供依据
OSI七层模型及各层功能概述