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

69 篇文章 14 订阅
53 篇文章 15 订阅

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时,公式为:

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

其中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 <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

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;
}

输入:

输出:

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值