函数threshold对单通道数组应用固定阈值操作。该函数的典型应用是对灰度图进行阈值操作得到二值图像或者是去掉噪声。
固定阈值操作:Threshold()函数
#include<opencv2/core.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
Mat src=imread("1.jpg");
Mat src_gray,dst;
imshow("原图",src);
cvtColor(src,src_gray,COLOR_RGB2GRAY);
threshold(src_gray,dst,200,100,3);//200是阈值的具体值
imshow("效果图",dst);
waitKey(0);
return 0;
}
下面对 threshold(src_gray,dst,200,100,3);
中的第五个参数进行解释:
有5种类型:
- THRESH_BINARY:将被阈值化的值和阈值---------------------0
- THRESH_BINARY_INV:二值化阈值-----------------------------1
- THRESH_TRUNC:反向二值阈值化并反转---------------------2
- THRESH_TOZERO:超过阈值被置为0---------------------------3
- THRESH_TOZERO_INV:低于阈值被置为0-----------------------4
其中,我们用的最多的就是第四和第五种类型
自适应阈值操作:adaptiveThreshold()函数
OpenCV提供的API:
void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue,
int adaptiveMethod, int thresholdType, int blockSize, double C)
说明下各参数:
-
InputArray src
:源图像 -
OutputArray dst
:输出图像,与源图像大小一致 -
double maxValue
给像素赋的满足条件的非零值 -
int adaptiveMethod
:在一个邻域内计算阈值所采用的算法,有两个取值,分别为ADAPTIVE_THRESH_MEAN_C
和ADAPTIVE_THRESH_GAUSSIAN_C
。ADAPTIVE_THRESH_MEAN_C
的计算方法是计算出领域的平均值再减去第七个参数double C的值。ADAPTIVE_THRESH_GAUSSIAN_C
的计算方法是计算出领域的高斯均值再减去第七个参数double C的值。 -
int thresholdType
:这是阈值类型,只有两个取值,分别为THRESH_BINARY
和THRESH_BINARY_INV
。 -
int blockSize
:adaptiveThreshold
的计算单位是像素的邻域块,这是局部邻域大小,3、5、7等。 -
double C
:这个参数实际上是一个偏移值调整量,用均值和高斯计算阈值后,再减或加这个值就是最终阈值。
#include<opencv2/core.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
Mat src=imread("1.jpg");
Mat src_gray,dst;
imshow("原图",src);
cvtColor(src,src_gray,COLOR_RGB2GRAY);
adaptiveThreshold(src_gray,dst,255,ADAPTIVE_THRESH_GAUSSIAN_C,0,3,1);
imshow("效果图",dst);
waitKey(0);
return 0;
}