OpenCv3(滤波篇)----adaptiveThreshold自适应阈值化

相对于一般得阈值化操作,当图像中出现较大得明暗差异时,自适应阈值化非常有效。

效果:
在这里插入图片描述
函数原型:

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

src:8位单通道图像
dst:目标图像的大小和类型与src相同
maxValue:赋给满足条件的像素的非零值
adaptiveMethod:自适应阈值滤波算法选择cv::ADAPTIVE_THRESH_GAUSSIAN_C或者cv::ADAPTIVE_THRESH_MEAN_C
thresholdType:阈值设定类型cv::THRESH_BINARY或者cv::THRESH_BINARY_INV
blockSize:用于计算阈值的像素邻域的大小 如:3,5,7等等。
C:通常情况下,它是正数,但也可能是零或负数

代码:

void example()
{
    
    
    cv::Mat input = cv::imread("d:\\desktop\\picture\\test.jpg"), output, str1;
    cv::namedWindow("example");
    int maxval = 0, adaptiveMethod = 0, thresholdType = 0 , blockSize = 1, C = -100, blockSize_test = 1, c_test = 100;
    cv::createTrackbar("maxval", "example", &maxval, 255);
    cv::createTrackbar("adaptiveMethod", "example", &adaptiveMethod, 1);
    cv::createTrackbar("thresholdType", "example", &thresholdType, 1);
    cv::createTrackbar("blockSize", "example", &blockSize_test, 255);
    cv::createTrackbar("C", "example", &c_test, 200);
    cv::cvtColor(input, str1, CV_BGR2GRAY);
    for(;;)
    {
    
    
        blockSize = blockSize_test;
        if(blockSize_test < 1) //使blockSize_test大于1
            blockSize = 1;
        C = c_test - 100; //小于100为负数  ,因cv::createTrackbar不能设置最小值
        cv::adaptiveThreshold(str1, output, maxval, adaptiveMethod, thresholdType, blockSize*2+1, C);
        cv::imshow("example", output);
        if(cv::waitKey(100) == 27)
            break;
    }

}

猜你喜欢

转载自blog.csdn.net/qq_42401265/article/details/107773700