opencv库函数学习:addWeighted

本文详细介绍了OpenCV库中的addWeighted函数,该函数用于实现两个图像的加权混合,通过调整alpha和beta参数控制两个源图像的贡献比例,并可通过gamma参数添加偏移值。文章解释了函数的各个参数含义,包括输入图像、权重、输出图像、类型转换等,同时给出了数学表达式,帮助读者深入理解其工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

addWeighted函数
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1)

第一个参数,InputArray类型的src1,表示需要加权的第一个数组,常常填一个Mat。
第二个参数,alpha,表示第一个数组的权重
第三个参数,src2,表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数。
第四个参数,beta,表示第二个数组的权重值。
第五个参数,dst,输出的数组,它和输入的两个数组拥有相同的尺寸和通道数。
第六个参数,gamma,一个加到权重总和上的标量值。看下面的式子自然会理解。

第七个参数,dtype,输出阵列的可选深度,有默认值-1。;当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()
---------------------

addWeighted函数的作用可以被表示为为如下的矩阵表达式为:
**dst = src1[I]alpha+ src2[I]beta + gamma

### 使用 Python 和 OpenCV 进行数字图像处理 #### 图像读取与显示 在使用 OpenCV 处理图像时,通常的第一步是从文件中加载图像并将其显示出来。以下是实现这一功能的代码示例: ```python import cv2 # 加载图像 image = cv2.imread('example.jpg') # 显示图像 cv2.imshow('Image', image) # 等待按键按下 cv2.waitKey(0) # 关闭窗口 cv2.destroyAllWindows() ``` 上述代码展示了如何通过 `cv2.imread` 函数加载一张图片,并利用 `cv2.imshow` 将其展示给用户[^1]。 --- #### 图像转换为灰度图 很多时候,在进行复杂的图像分析之前,需要先将彩色图像转换成灰度图像以便简化后续的操作。可以使用如下代码完成此操作: ```python gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) cv2.imshow('Gray Image', gray_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段代码中的 `cv2.cvtColor` 方法被用来执行颜色空间变换,具体来说就是从 BGR 转换到 GRAY 颜色模式。 --- #### 边缘检测 边缘检测是一种常见的图像处理技术,能够帮助识别物体边界。Canny 边缘检测器是其中一种非常流行的方法: ```python edges = cv2.Canny(gray_image, threshold1=30, threshold2=100) cv2.imshow('Edges', edges) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这里调用了 `cv2.Canny` 来查找图像中的强边缘像素位置。 --- #### 形状逼近与凸包计算 当涉及到更高级别的几何形状提取时,可能需要用到轮廓逼近以及凸壳的概念。下面是一段演示这些概念的小例子: ```python contours, _ = cv2.findContours(edges.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for contour in contours: epsilon = 0.01 * cv2.arcLength(contour, True) approx = cv2.approxPolyDP(contour, epsilon, True) hull = cv2.convexHull(contour) cv2.drawContours(image, [hull], -1, (0, 255, 0), 2) cv2.imshow('Convex Hulls', image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 该脚本首先找到所有的外部轮廓,接着对于每一个轮廓都尝试去拟合一个多边形来表示它的外形结构;最后再用绿色线条画出了每条路径对应的凸外壳区域[^3]。 --- #### 图像算术运算对比 有时我们需要对两张不同的照片做简单的数学运算比如相加减乘除等基本操作。虽然 NumPy 提供了一些基础支持但是推荐优先考虑采用专门设计好的库函数版本因为它们往往经过优化从而表现得更快也更加稳定可靠一些: ```python img1 = cv2.imread('image1.jpg') img2 = cv2.imread('image2.jpg') weighted_sum = cv2.addWeighted(img1, 0.7, img2, 0.3, 0) cv2.imshow('Blended Images', weighted_sum) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这里我们运用到了 `cv2.addWeighted()` 实现了两个输入影像按权重比例混合的效果[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值