在 OpenCV 中,threshold
函数用于将图像转换为二值图像,它通过设置一个阈值来将像素值分类为两类:低于阈值的像素设置为 0(或黑色),高于阈值的像素设置为最大值(通常是 255 或白色)。这是图像处理中的一种常见操作,特别是在边缘检测、图像分割和目标识别等任务中。
函数原型:
cv::threshold(const cv::Mat& src, // 输入图像,应该是灰度图cv::Mat& dst, // 输出图像,结果会存储在这里double thresh, // 阈值double maxval, // 大于阈值的像素值int thresholdType // 阈值类型
);
参数:
src
:输入图像,通常是灰度图像。threshold
操作只对单通道图像(通常是灰度图像)有效。dst
:输出图像,存储二值化后的结果。thresh
:阈值,用于将像素值分为两类。如果像素值大于thresh
,则设置为maxval
;否则设置为 0。maxval
:大于阈值的像素将被设置为此值。通常为 255(白色)。thresholdType
:阈值类型。OpenCV 提供了几种不同的类型,用于控制阈值操作的方式。常用的类型如下:
thresholdType
参数的常用值:
cv::THRESH_BINARY
:如果像素值大于thresh
,则设置为maxval
,否则设置为 0。即将图像转为黑白图像。cv::THRESH_BINARY_INV
:与THRESH_BINARY
相反。如果像素值大于thresh
,则设置为 0,否则设置为maxval
。cv::THRESH_TRUNC
:如果像素值大于thresh
,则将其值设置为thresh
,否则不变。cv::THRESH_TOZERO
:如果像素值大于thresh
,则不改变其值,否则设置为 0。cv::THRESH_TOZERO_INV
:与THRESH_TOZERO
相反。如果像素值大于thresh
,则不变,否则设置为 0。cv::THRESH_OTSU
:自动计算阈值(基于 Otsu 的算法)。thresh
参数在这种情况下会被忽略,OpenCV 会自动计算最佳阈值。
返回值:
threshold
函数返回一个浮动的阈值(retval
),如果使用了 cv::THRESH_OTSU
,则该值是计算得到的最佳阈值。