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

  • 图像混合:通过调节 alphabeta 的值,可以实现图像的平滑过渡。例如,当 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);

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


posted @ 2024-08-26 15:04  做梦当财神  阅读(120)  评论(0编辑  收藏  举报