转载自:http://www.itnose.net/detail/6060285.html
threshold 方法是通过遍历灰度图中点,将图像信息二值化,处理过后的图片只有二种色值。
其函数原型如下:
double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)参数信息:
第一个参数,InputArray类型的src,输入数组,填单通道 , 8或32位浮点类型的Mat即可。
第二个参数,OutputArray类型的dst,函数调用后的运算结果存在这里,即这个参数用于存放输出结果,且和第一个参数中的Mat变量有一样的尺寸和类型。
第三个参数,double类型的thresh,阈值的具体值。
第四个参数,double类型的maxval,当第五个参数阈值类型type取 THRESH_BINARY 或THRESH_BINARY_INV阈值类型时的最大值.
第五个参数,int类型的type,阈值类型,。
其它参数很好理解,我们来看看第五个参数,第五参数有以下几种类型
0: THRESH_BINARY 当前点值大于阈值时,取Maxval,也就是第四个参数,下面再不说明,否则设置为0
1: THRESH_BINARY_INV 当前点值大于阈值时,设置为0,否则设置为Maxval
2: THRESH_TRUNC 当前点值大于阈值时,设置为阈值,否则不改变
3: THRESH_TOZERO 当前点值大于阈值时,不改变,否则设置为0
4: THRESH_TOZERO_INV 当前点值大于阈值时,设置为0,否则不改变官方解释如下图:
下面是简单应用实例代码片段
int nY20_thresh=96;
int nY20_MaxThesh=255;
void _onY20thresh(int,void*){
Mat src;
m_Mat.copyTo(src);
Mat dst,edge,gray;
// 【1】创建与src同类型和大小的矩阵(dst)
dst.create( src.size(), src.type() );
// 【2】将原图像转换为灰度图像
cvtColor( src, gray, CV_BGR2GRAY );
// 【3】先用使用 3x3内核来降噪
blur( gray, edge, Size(3,3) );
//type选THRESH_BINARY,大于阈值的设置为maxval(255),其它置0
threshold(edge, dst, nY20_thresh, 255, THRESH_BINARY);
CVShow("threshold二值化灰图",dst,400,400);
}