玩转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函数的使用方法,你可以轻松实现各种图像叠加效果,为图像处理和计算机视觉应用增添更多可能性。
热门推荐
崇祯皇帝:从勤政到灭亡的历史教训
从“中兴之主”到“问题青年”:崇祯皇帝的性格悲剧
小说推广新玩法:社交媒体+互动抽奖
《花样年华》4K加长版:一段隐秘爱情的全新可能
《花样年华》4K加长版重映:25年后的全新相遇
周深演绎《春雪》:清冷音色,细腻表达,高音亮丽
用爱提升亲子沟通质量:从理解到共鸣
心理咨询师宋文雯:5个实用技巧,轻松提升心理健康
复旦大学职场沟通秘笈:布兰佳《会谈能力》助你提升对话力
冬季老年人皮肤干燥?这样洗澡最科学
冬季老人洗澡防滑指南:从环境改造到日常护理
寒冬里的温暖:上门助浴让老人安心洗个澡
学会四件事快速练出完美腰部线条
Nature:为什么概率可能不存在(但假设它存在是有用的)
甲寅日柱2025年流年运势详解:稳步前行,把握机遇
一人之下漫画有多精彩,深度解析角色与剧情发展
用MoviePy轻松搞定视频抽帧!
四川巴中民俗:正月十六登高
光头强的伐木生涯与环保意识
当游戏遇到安全问题,怎么做?游戏治理至关重要!
庄子《天运》:人生的最高境界,是顺应自然
日本自由行必备 | 超详细日本交通攻略【图文5000字】
日本留学东京交通出行指南
林栋哲和庄筱婷的甜蜜日常
倾听的五个阶段:从注意、理解到行动
新加坡华文文学概述
九个奇异故事,属于新加坡的都市小说面世了
农民工讨薪如何应对
ID3车主分享:新能源车长途驾驶全攻略
南宁楼市持续升温,10月商品房成交量环比上涨87%