OpenCV(cv::addWeighted()、cv::threshold())
1. cv::addWeighted()
cv::addWeighted() 是 OpenCV 中用于将两幅图像按指定的权重进行加权求和的函数。主要用途包括图像融合、过渡效果生成等。
函数定义:
void cv::addWeighted(
InputArray src1,
double alpha,
InputArray src2,
double beta,
double gamma,
OutputArray dst,
int dtype = -1
);
参数详解:
src1: 第一张输入图像(或矩阵)。alpha: 第一张图像的权重(即其比例系数)。src2: 第二张输入图像(或矩阵),其大小和类型应与src1相同。beta: 第二张图像的权重。gamma: 添加到最终图像上的常数值,用于整体的亮度调整。dst: 输出图像,计算结果的存储位置。dtype: 输出图像的数据类型。如果未指定(默认为-1),输出图像的类型与输入图像相同。
公式:
dst(i) = src1(i) * alpha + src2(i) * beta + gamma
- 图像混合:通过调节
alpha和beta的值,可以实现图像的平滑过渡。例如,当alpha为 0.7 而beta为 0.3 时,可以认为 70% 的第一张图像和 30% 的第二张图像融合在一起。
例子:
cv::Mat img1, img2, result;
double alpha = 0.7;
double beta = 0.3;
cv::addWeighted(img1, alpha, img2, beta, 0.0, result);
该例子将 img1 和 img2 按比例 0.7 和 0.3 加权相加,得到 result。
2. cv::threshold()
cv::threshold() 是 OpenCV 中用于对图像进行二值化处理的函数,可以将图像的灰度值根据阈值分成两类:小于某一阈值的像素设为一个值,大于该阈值的像素设为另一个值。它是图像分割和特征提取中的基础操作。
函数定义:
double cv::threshold(
InputArray src,
OutputArray dst,
double thresh,
double maxval,
int type
);
参数详解:
src: 输入图像,通常是单通道灰度图像。dst: 输出图像,类型和尺寸与输入图像相同。thresh: 阈值,根据此值决定像素的分类。maxval: 如果像素值符合条件(如大于或小于阈值),该像素将被赋予的值(通常为 0 或maxval)。type: 阈值类型,它决定了如何应用阈值。常见类型有:cv::THRESH_BINARY: 大于阈值的像素设置为maxval,否则设置为 0。cv::THRESH_BINARY_INV: 小于阈值的像素设置为maxval,否则设置为 0。cv::THRESH_TRUNC: 大于阈值的像素值被截断为阈值,其他像素值保持不变。cv::THRESH_TOZERO: 小于阈值的像素设置为 0,其他像素保持不变。cv::THRESH_TOZERO_INV: 大于阈值的像素设置为 0,其他像素保持不变。
返回值:
函数返回应用的阈值 thresh(对于自适应阈值方法可能有所不同)。
例子:
cv::Mat img, result;
double thresh = 128;
double maxval = 255;
cv::threshold(img, result, thresh, maxval, cv::THRESH_BINARY);
该例子将 img 中的像素值按 128 的阈值二值化,像素值大于 128 的点被设为 255,其他像素设为 0。
3. 总结:
cv::addWeighted()用于将两幅图像按比例融合,是创建平滑过渡和图像融合效果的常用函数。cv::threshold()用于图像二值化,通过阈值分割图像,常用于对象检测和图像预处理。

浙公网安备 33010602011771号