OpenCV之自适应阈值操作:adaptiveThreshold()函数

adaptiveThreshold()函数的作用是对矩阵采用自适应阈值操作,函数原型:

double adapTivaThreshold(InputArray src, OutputArray dst, double maxVal, int adaptiveMethod, int thresholdType, int blockSize, double C)
  • 第一个参数:InputArray类型的src,输入数组,必须为单通道,8位或32位的浮点型Mat即可。
  • 第二个参数:OutputArray类型的dst,与输入有一样的尺寸和类型。
  • 第三个参数:double类型的maxval,给像素赋的满足条件的非0值。
  • 第四个参数:int类型的adaptiveMethod,指定要使用的自适应阈值算法,可取值为ADAPTIVE_THRESH_MEAN_C或ADAPTIVE_THRESH_GAUSSIAN_C
  • 第五个参数:int类型的thresholdType,阈值类型,必须为THRESH_BINARY或THRESH_BINARY_INV。
  • 第六个参数:int类型的blocksize,用于计算阈值大小的一个像素的邻域尺寸,取3,5,7等。
  • 第七个参数:double类型的C,减去平均或加权平均值后的常数值,通常为正数。

adaptiveThreshold()函数根据如下公式,将一幅灰度图变为二值图,当第五个参数thresholdTypr为THRESH_BINARY时,公式为:

OpenCV之自适应阈值操作:adaptiveThreshold()函数_第1张图片

当第五个参数thresholdTypr为THRESH_BINARY_INV时,公式为:

OpenCV之自适应阈值操作:adaptiveThreshold()函数_第2张图片

其中T(x, y)为分别计算每个像素的单独阈值,取值如下:

  • 对于ADAPTIVE_THRESH_MEAN_C方法,T(x, y)为bloskSize*blockSize邻域内(x, y)减去第七个参数C的平均值。
  • 对于ADAPTIVE_THRESH_GAUSSIAN_C方法,T(x, y)为bloskSize*blockSize邻域内(x, y)减去第七个参数C与高斯窗交叉相关的加权总和。

代码示例:

#include 
#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;
int main() {
    Mat srcImage, grayImage;
    srcImage = imread("/Users/dwz/Desktop/cpp/1.jpg");
    cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);
    Mat dstImage;
    adaptiveThreshold(grayImage, dstImage, 255, 1, 0, 5,0);
    imwrite("threshold.jpg", dstImage);

    return 0;
}

输入:

OpenCV之自适应阈值操作:adaptiveThreshold()函数_第3张图片

输出:

OpenCV之自适应阈值操作:adaptiveThreshold()函数_第4张图片

你可能感兴趣的:(opencv,C++,图像处理,opencv,计算机视觉,c++)