首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【OpenCV 二值化cv::threshold 函数】参数、作用、应用场景

【OpenCV 二值化cv::threshold 函数】参数、作用、应用场景

作者头像
flos chen
发布2026-01-23 15:07:28
发布2026-01-23 15:07:28
1400
举报

cv::threshold 是 OpenCV 中用于 图像阈值化处理 的核心函数,主要用于将灰度图像根据设定的阈值转换为二值图像或进行其他形式的像素分类。 【二值化:通过阈值给像素分区间】


函数原型
代码语言:javascript
复制
double cv::threshold(
    cv::InputArray src,   // 输入图像(单通道,如灰度图)
    cv::OutputArray dst,  // 输出图像(与输入同尺寸、类型)
    double thresh,        // 阈值
    double maxval,        // 最大值(仅用于某些阈值类型)
    int type              // 阈值化类型(决定如何处理像素)
);

参数详解
  1. src
    • 类型:cv::InputArray(如 cv::Mat
    • 含义:输入图像,必须为单通道(如灰度图)。若为多通道图像(如彩色图),需先转换为灰度图(例如使用 cv::cvtColor)。
  2. dst
    • 类型:cv::OutputArray(如 cv::Mat
    • 含义:输出图像,尺寸和类型与 src 相同。
  3. thresh
    • 类型:double
    • 含义:设定的阈值,用于像素分类。例如,若阈值为 127,则所有像素根据其值与 127 的比较结果被重新赋值。
  4. maxval
    • 类型:double
    • 含义:在 二值化阈值类型(如 THRESH_BINARY)中使用的最大值。例如,当像素值超过阈值时,将其设为 maxval
  5. type
    • 类型:int
    • 含义:阈值化类型,决定如何根据阈值处理像素。可选值如下(通过 cv::ThresholdTypes 枚举指定):
功能与实现效果
  1. 核心功能
    • 对输入图像的每个像素进行分类,根据阈值和类型生成新的像素值。
    • 常用于 图像分割,将图像分为前景(目标)和背景。
  2. 典型实现效果
    • 二值化THRESH_BINARY):生成黑白图像,突出目标区域。
    • 截断THRESH_TRUNC):保留高亮度区域的细节,抑制低亮度区域。
    • 自适应阈值THRESH_OTSUTHRESH_TRIANGLE):自动计算最佳阈值,适合光照不均匀的图像。

应用场景
  1. 文档扫描与OCR
    • 将扫描的文档二值化,去除背景噪声,提高文字识别准确率。
  2. 边缘检测预处理
    • 在边缘检测(如 Canny)前,通过阈值化简化图像。
  3. 目标分割
    • 分离图像中的目标与背景(如车牌识别、细胞检测)。
  4. 光照校正
    • 对光照不均匀的图像使用自适应阈值(如 THRESH_OTSU)进行分割。
  5. 图像增强
    • 通过 THRESH_TOZERO 保留高亮区域,抑制暗区噪声。

代码示例
1. 基本二值化
代码语言:javascript
复制
cv::Mat src = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
cv::Mat dst;
double thresh = 127;
double maxval = 255;

// 应用二值化阈值
cv::threshold(src, dst, thresh, maxval, cv::THRESH_BINARY);
2. 自动阈值(大津算法)
代码语言:javascript
复制
cv::Mat src = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
cv::Mat dst;

// 自动计算阈值(thresh 参数被忽略)
double otsu_thresh = cv::threshold(
    src, dst, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU
);
3. 截断处理
代码语言:javascript
复制
cv::threshold(src, dst, 150, 255, cv::THRESH_TRUNC);

注意事项

输入图像类型

输入图像必须为单通道(如 CV_8UC1)。若为彩色图像,需先转换为灰度图:

代码语言:javascript
复制
cv::cvtColor(color_img, gray_img, cv::COLOR_BGR2GRAY);

自动阈值方法

  • 使用 THRESH_OTSUTHRESH_TRIANGLE 时,thresh 参数会被忽略,函数会返回计算的最佳阈值。需将阈值类型与其他二值化类型结合(如 THRESH_BINARY | THRESH_OTSU)。

输出图像类型

  • 输出图像与输入图像类型一致。例如,输入为 CV_8UC1,输出也为 CV_8UC1

返回值意义

  • 函数返回实际使用的阈值。对于自动阈值方法(如 Otsu),返回值是计算出的最佳阈值。

总结

cv::threshold 是图像处理中用于 像素分类 的基础工具,通过灵活选择阈值和类型,可以实现图像二值化、噪声抑制、目标分割等功能。结合自适应阈值方法(如 Otsu),可有效处理光照不均匀的场景,是计算机视觉任务(如 OCR、目标检测)中的重要预处理步骤。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 函数原型
  • 参数详解
  • 功能与实现效果
  • 应用场景
  • 代码示例
    • 1. 基本二值化
    • 2. 自动阈值(大津算法)
    • 3. 截断处理
  • 注意事项
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档