OpenCV|OpenCV-自适应阈值函数cv::adaptiveThreshold

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
函数原型

void adaptiveThreshold( InputArray src, OutputArray dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C );


参数说明
  1. InputArray类型的src,输入图像。
  2. OutputArray类型的dst,输出图像。
  3. double类型的maxval,阈值最大值。
  4. int类型的adaptiveMethod,自适应阈值算法类型。0为ADAPTIVE_THRESH_MEAN_C(均值法获取阈值),1为ADAPTIVE_THRESH_GAUSSIAN_C(高斯窗加权和获取阈值)。
  5. int类型的thresholdType,阈值操作的类型,0为THRESH_BINARY(标准的二值化阈值法,大于thresh的设为maxval,小于的设为0),1为THRESH_BINARY_INV(反向二值化),2为THRESH_TRUNC(截断阈值法,大于thresh的设为thresh,小于则不变),3为THRESH_TOZERO(零化阈值法,大于thresh的不变,小于则零化),4为THRESH_TOZERO_INV(反向零化),7为THRESH_MASK(没测试出来什么用法,都是黑屏),8为THRESH_OTSU(大津算法,适合双峰直方图的图像,通过分析最大的背景前景类间方差,自动调节阈值),16为THRESH_TRIANGLE(三角法,适合单峰直方图图像,建立谷底和峰顶直线,距离直线垂直距离最大的直方图位置,即阈值thresh)。
  6. int类型的blockSize,窗口的大小,只能为奇数。
  7. double类型的C,自适应阈值算法得到平均值或加权平均值后,再减的常数值。

测试代码
#include #include "opencv2/core.hpp" #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp"using namespace cv; using namespace std; int main() { cv::Mat src = https://www.it610.com/article/imread("test.jpg",0); cv::Mat th1,th2; // 自适应阈值函数 adaptiveThreshold(src, th1, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 7, 5); adaptiveThreshold(src, th2,255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 7, 5); imshow("original", src); imshow("mean", th1); imshow("gaussian", th2); waitKey(0); return 0; }


测试效果 图1 灰度图 OpenCV|OpenCV-自适应阈值函数cv::adaptiveThreshold
文章图片
图2 均值窗 OpenCV|OpenCV-自适应阈值函数cv::adaptiveThreshold
文章图片
图3 高斯窗 该自适应阈值函数可以用来获取图像边缘特征,用mean或者gaussian都可以;设置常数C时,若其为正数,相当于窗口内求完平均值再减去C的值为阈值,这样对那些颜色类似的区域而言,假设C为5,平均值为120,中心值为119,那么阈值为115,中心值大于阈值,即该点显示为白色;反之,若C为负数,则上图中背景区域基本就是黑色了~
【OpenCV|OpenCV-自适应阈值函数cv::adaptiveThreshold】如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

    推荐阅读