
cv::threshold 是 OpenCV 中用于 图像阈值化处理 的核心函数,主要用于将灰度图像根据设定的阈值转换为二值图像或进行其他形式的像素分类。
【二值化:通过阈值给像素分区间】
double cv::threshold(
cv::InputArray src, // 输入图像(单通道,如灰度图)
cv::OutputArray dst, // 输出图像(与输入同尺寸、类型)
double thresh, // 阈值
double maxval, // 最大值(仅用于某些阈值类型)
int type // 阈值化类型(决定如何处理像素)
);src
cv::InputArray(如 cv::Mat)cv::cvtColor)。dst
cv::OutputArray(如 cv::Mat)src 相同。thresh
doublemaxval
doubleTHRESH_BINARY)中使用的最大值。例如,当像素值超过阈值时,将其设为 maxval。type
intcv::ThresholdTypes 枚举指定):THRESH_BINARY):生成黑白图像,突出目标区域。
THRESH_TRUNC):保留高亮度区域的细节,抑制低亮度区域。
THRESH_OTSU 或 THRESH_TRIANGLE):自动计算最佳阈值,适合光照不均匀的图像。
Canny)前,通过阈值化简化图像。THRESH_OTSU)进行分割。THRESH_TOZERO 保留高亮区域,抑制暗区噪声。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);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
);cv::threshold(src, dst, 150, 255, cv::THRESH_TRUNC);输入图像类型
输入图像必须为单通道(如 CV_8UC1)。若为彩色图像,需先转换为灰度图:
cv::cvtColor(color_img, gray_img, cv::COLOR_BGR2GRAY);自动阈值方法
THRESH_OTSU 或 THRESH_TRIANGLE 时,thresh 参数会被忽略,函数会返回计算的最佳阈值。需将阈值类型与其他二值化类型结合(如 THRESH_BINARY | THRESH_OTSU)。输出图像类型
CV_8UC1,输出也为 CV_8UC1。返回值意义
cv::threshold 是图像处理中用于 像素分类 的基础工具,通过灵活选择阈值和类型,可以实现图像二值化、噪声抑制、目标分割等功能。结合自适应阈值方法(如 Otsu),可有效处理光照不均匀的场景,是计算机视觉任务(如 OCR、目标检测)中的重要预处理步骤。