二值化系列:
(1)OTSU算法
(2)固定二值化
(3)自适应二值化
adaptiveThreshold
void adaptiveThreshold(InputArray src, OutputArraydst,double maxValue,int adaptiveMethod,int thresholdType,
int blockSize,double C );
- double maxValue-----------------------//灰度图像的最大值,最小值为0(即黑色)
- int adaptiveMethod-------------------//阈值算法CV_ADAPTIVE_THRESH_MEAN_C、CV_ADAPTIVE_THRESH_GAUSSIAN_C
- int thresholdType---------------------//二值图是否反转CV_THRESH_BINARY、CV_THRESH_BINARY_INV
- int blockSize---------------------------//块的大小,只能取奇数3,5,7......
- double C-------------------------------//加权系数,可取负数
调用实例:
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage = imread("F:\\opencv_re_learn\\2.jpg");
if (!srcImage.data){
cout << "failed to read" << endl;
system("pause");
return -1;
}
imshow("src", srcImage);
//conver to gray
Mat srcGray;
cvtColor(srcImage, srcGray, CV_BGR2GRAY);
Mat dstImage;
//初始化参数
int blockSize = 3;
int constValue = 5;
const int maxVal = 255;
//算法选择
//0:ADAPTIVE_THRESH_MEAN_C
//1:ADAPTIVE_THRESH_GAUSSIAN_C
//阈值类型
//0:THRESH_BINARY
//1:THRESH_BINARY_INV
//阈值化
adaptiveThreshold(srcGray, dstImage, maxVal,
ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY,
blockSize, constValue);
imshow("thres_result", dstImage);
waitKey(0);
return 0;
}
实现效果: