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()
用于图像二值化,通过阈值分割图像,常用于对象检测和图像预处理。