玩转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函数的使用方法,你可以轻松实现各种图像叠加效果,为图像处理和计算机视觉应用增添更多可能性。
热门推荐
为什么总是养不好乌龟?(养龟人常犯的 8 大禁忌)
这8首经典诗词里,藏着你对生活的态度!
55岁阿姨的时尚穿搭:六套洋气look让你重拾自信
如何在爱情与责任之间找到平衡?揭秘公主多情与谨慎的成长轨迹
欧洲车市 | 11月瑞典汽车销量:中国品牌逐步发力
论文选题选什么主题好
如何用 C 语言编程计算幂次方
大清道光年制官窑款识真品图片鉴赏
沥青混凝土的摊铺和碾压工艺研究
最全夜景拍摄技巧分享,附参数
过了这一年龄,就该给孩子零花钱了,很多人都给晚了
“祚”字的文化意义与现代生活中的应用与思考
物化生组合可选专业及就业方向全解析
健康饮食从无油烹煮开始(15种以无油烹煮的食物)
小乌龟是如何长大的
热身运动:运动前的黄金准备
小红书平台-2024年健康生活趋势研究报告
“博物馆+” 如火如荼的当下,公益文化机构也在尝试市场化运营?
日照金山:探寻自然奇观的魅力
海南中线景点排名及热门旅游景点推荐
网站SEO优化:7个实用技巧助你提升搜索引擎排名
高考英语读后续写:4种主旨升华的万能公式(收藏)
人工智能安全治理框架解读:数据安全风险及应对篇
膈肌功能障碍的原因及诊断方法
午间健身:上班族的健康新选择
车轮校准是什么?详解车轮校准的重要性与操作步骤
BRD4在表观遗传调控中的作用及其作为抗肿瘤药物靶点的潜力
新干线路线与种类、车厢座位、购票方式一次搞懂!
无惧他者凝视,独立审视自我——二元思辨类材料作文导写示例
深入解析财务报表:如何抓住关键指标作出明智决策